1. ホーム
  2. python

[解決済み] sqlalchemy flush()で挿入されたidを取得する?

2022-05-04 11:53:36

質問

このようなことをしたいのですが。

f = Foo(bar='x')
session.add(f)
session.flush()

# do additional queries using f.id before commit()
print f.id # should be not None

session.commit()

しかし f.idNone を試したところ どうしたらうまくいくのでしょうか?

どのように解決するのですか?

サンプルコードはそのまま動作するはずです。SQLAlchemy は、このように f.id 自動生成された主キーカラムであると仮定しています。 プライマリキー属性は flush() を呼び出すことはありません。 commit() は必要ないはずです。 つまり、ここでの答えは、以下のいずれか、または複数にある。

  1. マッピングの詳細
  2. 使用しているバックエンドに奇妙な癖がある場合 (例えば、SQLite は複合主キーに整数値を生成しないなど)
  3. echo をオンにしたときに出力される SQL の内容