【问题标题】:Sqlalchemy Insert is not mappedSqlalchemy 插入未映射
【发布时间】:2026-01-11 01:40:01
【问题描述】:

目前我在尝试将插入附加到我的 sqlalchemy 会话时遇到问题。

给我错误的行:

DB_SESSION.add(TABLE.insert().values(...))

错误:

sqlalchemy.orm.exc.UnmappedInstanceError: Class 'sqlalchemy.sql.dml.Insert' is not mapped

我的表架构:

TABLE = Table(
    'tablename', metaData,
    Column('value1', NVARCHAR(5), primary_key=True),
    Column('value2', Integer, primary_key=True),
    Column('value3', NVARCHAR(30)),
    Column('value4', NVARCHAR(50)),
    Column('value5', Date)
)

在该表上运行选择工作正常。例如:

query = TABLE.select().where((...) and (...))
for row in WAREHOUSE_SQL_CONNECTION.execute(query):
    (...)

【问题讨论】:

  • this question 的答案可能对你有用。
  • @SuperShoot 阅读完该问题后,我找不到与我的问题相关的任何内容。例如,我确实知道引擎和连接执行之间的区别。
  • 我认为this answer 是相关的,特别是WRT 将会话描述为ORM 特有的构造,而您正试图通过它发出core 选择。换句话说,Session.add() 需要一个 ORM 映射类,而不是核心 sql 构造。该问题中的任何答案都提供了如何执行核心 sql 语句的很好的示例。

标签: python python-3.x sqlalchemy


【解决方案1】:

你可以试试:

query = TABLE.select().where((...) and (...))
for row in query.all():
    # Code to update fields of row goes here
    db.session.add(updated_row)
    db.session.commit()

【讨论】: