我刚刚遇到了一个相当棘手的问题,经过测试,我发现没有一个可用的答案是足够的。
我已经看到了各种建议,但似乎没有一个能够返回 MySQL 中 auto_increment 字段的最后插入值。
我见过提到使用 session.flush() 添加记录然后检索 id 的示例。然而,这似乎总是返回 0。
我还看到提到使用 session.refresh() 但引发以下错误的示例: InvalidRequestError: Could not refresh instance ''
我正在尝试做的事情似乎非常简单,但我似乎无法弄清楚其中的秘密。
我正在使用声明性方法。
所以,我的代码看起来像这样:
class Foo(Base):
__tablename__ = 'tblfoo'
__table_args__ = {'mysql_engine':'InnoDB'}
ModelID = Column(INTEGER(unsigned=True), default=0, primary_key=True, autoincrement=True)
ModelName = Column(Unicode(255), nullable=True, index=True)
ModelMemo = Column(Unicode(255), nullable=True)
f = Foo(ModelName='Bar', ModelMemo='Foo')
session.add(f)
session.flush()
至此,对象 f 已经被推送到 DB,并被自动分配了唯一的主键 id。但是,我似乎无法找到一种方法来获取在某些附加操作中使用的值。我想做以下事情:
my_new_id = f.ModelID
我知道我可以简单地执行另一个查询来根据其他参数查找 ModelID,但如果可能的话,我不希望这样做。
我将非常感谢任何对此问题的解决方案的见解。
我在这里先向您的帮助表示感谢。