【问题标题】:How execute an insert statement with sqlalchemy and sqlite?如何使用 sqlalchemy 和 sqlite 执行插入语句?
【发布时间】:2022-03-10 23:04:35
【问题描述】:

我正在尝试使用 sqlalchemy 执行 upsert。这是我的代码:

def add_product(session, item):
    insert_statement = insert(Product.__tablename__).values(
        id=item[0],
        name=item[1],
        price=item[2],
        units_sold=item[3]
    )
    do_update_statement = insert_statement.on_conflict_do_update(
        price=item[2],
        units_sold=item[3]
    )
    session.execute(do_update_statement)


class Product(Base):
    __tablename__ = 'products'

    id = Column(Integer, primary_key=True)
    name= Column(String)
    price= Column(Float)
    units_sold= Column(Integer)

但是,当我尝试执行此操作时,出现以下错误

sqlalchemy.exc.ArgumentError: subject table for an INSERT, UPDATE or DELETE expected, got 'products'.

为什么会发生这种情况,我该如何解决?另外,是否有更好的选项来创建 upsert 操作?

【问题讨论】:

  • insert(Product)insert(Product.__table__).
  • ... 或 insert(Product.__table__) 应该也能正常工作
  • 可能与 SQLALchemy 最新版本(1.4)有关,查看降级到 1.3.X 会发生什么以获得更多线索

标签: sqlite sqlalchemy


【解决方案1】:

您需要将schema.Table 对象传递给insert

insert(Base.metadata.tables[Product.__tablename__]).values(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多