【发布时间】:2011-12-21 05:14:06
【问题描述】:
我刚刚遇到了一个相当棘手的问题,经过测试,我发现没有一个可用的答案是足够的。
我看到了各种建议,但似乎没有一个能够返回 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,但如果可能的话,我不希望这样做。
我将非常感谢任何对此问题的解决方案的见解。
提前感谢您的帮助。
【问题讨论】:
标签: python mysql sqlalchemy declarative