1

私は現在、「一時的な」オブジェクトであり、永続化するためのものではなく、単に比較するためのものである宣言的アプローチを使用して、sqlalchemy オブジェクトを作成しようとしています。

そのため、現在のセッションの「外」でそれらを作成したいと思います。問題は、それらを1つずつ消去しないと、セッションがそれらをフラッシュしようとするため、外部キーエラーが作成されることです(オブジェクトが不完全であるため、これは正常です)。

私は sqlalchemy.ext.declarative の「declarative_base」を使用して基本クラスを作成し、それを継承してモデル オブジェクトを作成しました。例(疑似コード):

class BaseEntity(object):
   ... common columns ...

Base = declarative_base(cls=BaseEntity)
class MyObject(Base):
   ... other columns .. 

今私がするたびに:

tmpobj = MyObject()

私はする必要があります(別のモジュールで宣言されたscoped_sessionであるセッションオブジェクトを使用)

session.expunge(tmpobj)

私の tmp オブジェクトが作成される (そして互いにネストされる) 複雑な方法を考えると、これは本当に面倒です。

オブジェクトがセッションに追加されるのを防ぐために MyObject() コンストラクターに渡すことができる特別なパラメーターはありますか?

4

1 に答える 1

1

わかりました、確かに、これらの tmp オブジェクトを管理対象オブジェクトに追加していたので、それらもセッションによって管理されました。

解決策は、リレーションシップを使用して tmp オブジェクトを管理対象オブジェクトにリンクするのをやめ、代わりに外部キー列を使用することでした (まだ情報を保持する必要がありました)。

したがって、これを行う代わりに (この場合は backref 関係を使用します):

mytmpobject.relationobject =  aManagedRelationObject

これを行う :

mytmpobject.relationobject_id = aManagedRelationObject.id

このようにして、mytmp オブジェクトはセッションの外にとどまります。

于 2013-06-14T21:55:06.533 に答える