私はちょっと厄介な問題を抱えて実行しました。テストの結果、利用可能な回答のうちのどれもが十分ではないことがわかりました。SQLAlchemyを使用してMySQLから最後に挿入された値を取得
私はさまざまな提案を見てきましたが、MySQLのauto_incrementフィールドの最後に挿入された値を返すことができないようです。
私は、レコードを追加してidを取得するためにsession.flush()を使用する例を見てきました。しかし、いつも私もsession.refresh(の使用はもちろんの例を見てきました0
返すようです)が、それは次のエラーを発生させている:InvalidRequestErrorを:インスタンス「」私は何
を更新できませんでしたやってみると非常にシンプルに思えるが、私はその秘密を理解できないようだ。
私は宣言的なアプローチを使用しています。オブジェクトfは、DBにプッシュされており、自動的に一意の主キーのIDが割り当てられている、この時点で
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()
:
だから、私のコードは次のようになります。しかし、私は、いくつかの追加の操作で使用する値を取得する方法を見つけることができないようです。私は、次の操作を実行したいと思います:
my_new_id = f.ModelID
私は単に他のパラメータに基づいてModelIDをルックアップするために別のクエリを実行することができるが、すべての可能であれば私がいないことを好むだろう知っています。
私は、この問題の解決策について何らかの洞察を深めることができます。
ご協力ありがとうございます。
ニースキャッチは、デフォルト= 0に気付かなかった。 –
サーバのログは常に問題を見つけるために働くでしょう:) – Nilesh
Ugh ...はい、いいキャッチです。私の頭は、テーブルを作成するときにプライマリキーフィールドにデフォルト値が必要なSQL世界にありました。見つけてくれてありがとう。 – PlaidFan