【发布时间】: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