かなり厄介な問題に出くわしました。テストの結果、利用可能な回答のどれも十分ではないことがわかりました。
さまざまな提案を見てきましたが、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 を検索するだけでよいことはわかっていますが、可能であればそうしたくないと思います。
この問題の解決策についての洞察をいただければ幸いです。
事前に助けてくれてありがとう。