2

Zope トランザクションと一緒に SQLAlchemy を使用しています。私のオブジェクトは次のようなものです:

class MyItem(DeclarativeBase):

    #  ....
    id = Column(Integer, primary_key=True)
    # ....

次に、新しいオブジェクトを作成してトランザクションをコミットすると、生成された ID を取得したいと思います。次に例を示します。

mi = MyItem()
DBSession.add(mi)
transaction.commit()
print mi.id # currently object is expired (not persistent with this session)

この動作を実現する簡単な方法はありますか?

4

1 に答える 1

3

デフォルトのセッションパターンを使用できます。オブジェクトを追加してから、フラッシュしてオブジェクトをデータベースに保存します。トランザクションをコミットしないでください。Zopeに処理させてください。

mi = MyItem()
DBSession.add(mi)
DBSession.flush()
print mi.id

オブジェクトは現在のトランザクションでデータベースに追加されるため、主キーがわかります。

于 2012-05-24T12:40:55.467 に答える