我正在与Zope事务一起使用SQLAlchemy。我的对象是这样的:

class MyItem(DeclarativeBase):

    #  ....
    id = Column(Integer, primary_key=True)
    # ....


然后,当我创建一个新对象并提交事务时,我想获取一般化的ID,例如:

mi = MyItem()
DBSession.add(mi)
transaction.commit()
print mi.id # currently object is expired (not persistent with this session)


是否有一些简单的方法可以实现此目的?

最佳答案

您可以只使用默认的会话模式。添加对象,然后刷新以将对象保存到数据库。不要提交事务,让Zope处理:

mi = MyItem()
DBSession.add(mi)
DBSession.flush()
print mi.id


您的对象将在当前事务中添加到数据库,因此主键将是已知的。

关于python - SqlAlchemy,生成的对象ID和Zope事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10736681/

10-11 10:18