正如标题所示,我想在SQLALchemy中添加一个带有基于另一行的id的行。目前,我正在添加额外的select
,但我想摆脱这个。我知道这在MySQL中是可行的,所以我只想弄清楚SQLAlchemy版本。这是我现在拥有的:
keywords = ['a', 'b', 'c']
prefix_id = session.query(Prefix.id)\
.filter_by(name=some_prefix).first()[0]
inventory_item = InventoryItem(
item=some_item, prefix_id=prefix_id, address=some_address)
inventory_item_metas = [InventoryItemMeta(
inventory_item=inventory_item,
type='keyword',
value=keyword) for keyword in keywords]
请注意,我根据返回的ID添加了更多项目,因此我希望尽可能高效地在一次交易中完成所有操作。
答案 0 :(得分:2)
如果i0
是您要复制的对象,则可以将其从会话中删除以使其成为瞬态:
i0 = select
session.expunge(i0)
然后将id
设置为None
,以便它不再引用任何真实的数据库行:
i0.id = None
然后你可以修改对象:
i0.a = 1
i0.b = 2
最后,您将瞬态对象添加回会话并刷新它以获取新的id
:
session.add(i0)
session.flush()
您会发现该对象现在是一个新行:
print i0.id #New ID
如果您按旧ID查找,您将拥有与更改前相同的其他对象,并使用原始ID。