Iは第一bzCheckによって関連付けられている2つのテーブル、testInstanceとのBugzillaを持っを関連付けるオブジェクトを追加:このように、2つの既存のオブジェクト
class Instance(Base):
__tablename__ = "testInstance"
id = Column(Integer, primary_key=True)
bz_checks = relation(BZCheck, backref="instance")
class BZCheck(Base):
__tablename__ = "bzCheck"
instance_id = Column(Integer, ForeignKey("testInstance.id"), primary_key=True)
bz_id = Column(Integer, ForeignKey("bugzilla.id"), primary_key=True)
status = Column(String, nullable=False)
bug = relation(Bugzilla, backref="checks")
class Bugzilla(Base):
__tablename__ = "bugzilla"
id = Column(Integer, primary_key=True)
バックエンドがPostgreSQLサーバです。私はSQLAlchemyの0.5を使用してい
私はインスタンス、BugzillaのとBZCheck ojectsを作成する場合は、その後、
bzcheck.bug = bugzilla
instance.bz_checks.append(bzcheck)
と追加し、それらをコミットしません。すべて順調。
instance = session.query(Instance).filter(Instance.id == 31).one()
bugzilla = session.query(Bugzilla).filter(Bugzilla.id == 19876).one()
check = BZCheck(status="OK")
check.bug = bugzilla
instance.bz_checks.append(check)
それは失敗します:
In [6]: instance.bz_checks.append(check)
2012-01-09 18:43:50,713 INFO sqlalchemy.engine.base.Engine.0x...3bd0 select nextval('"bzCheck_instance_id_seq"')
2012-01-09 18:43:50,713 INFO sqlalchemy.engine.base.Engine.0x...3bd0 None
2012-01-09 18:43:50,713 INFO sqlalchemy.engine.base.Engine.0x...3bd0 ROLLBACK
はそれから新しいIDを取得しようと
しかし、今、のは、私は既存のインスタンスおよび既存のBugzillaを持っており、それらを関連付けたいとしましょう外部キー "testInstance.id"を使用する代わりに、わかりにくいシーケンス...理由を理解できません。 オブジェクトをコミットした後にオブジェクトを修正しようとしたときに同様の問題が発生しました。基本的なものを見逃していたはずですが、何がありますか?
なぜ最新のバージョン、0.7を使用していませんか? –
最終的に使用されるマシンは0.5.8しかないディストリビューションを実行しているので、私は手動インストールを避けたい – deubeuliou