【发布时间】:2011-12-14 21:47:21
【问题描述】:
在 Python 中,我想使用 SQLAlchemy 插入或更新一行。我试过这个:
existing = db.session.query(Toner)
for row in data:
new = Toner(row[0], row[1], row[2])
它不起作用。如何将new 插入或更新到Toner 表中?我怀疑它是通过合并完成的,但我不明白该怎么做。
【问题讨论】:
-
(标准)SQL 中没有插入或更新。您必须手动获取和更新现有对象,然后插入那些尚不存在的对象。或者,您将不得不回避 ORM 并手动发出依赖于后端的 SQL。
-
@Ferdinand Beyer session.merge() (sqlalchemy.org/docs/orm/session.html#merging) 不适合我吗?
-
session.merge()做了一些完全不同的事情:它将一个源自另一个会话的对象添加到会话中。例如,如果有一个 ID 为 42 的对象,session.merge()将从数据库中获取 ID 为 42 的行,并返回一个表示同一数据库行的新对象。这与INSERT或UPDATE无关。 -
您的示例代码令人困惑:它显示您从数据库中检索
Toner对象,这意味着它们已经存在;然后您尝试使用相同的字段再次创建Toner对象。请将您的示例扩展为更现实的示例。 -
您能否更改已接受的答案,因为它只有反对票并且您对它的评论表明它对您没有帮助?
标签: python sqlalchemy