我有兩個表,testInstance和bugzilla的由第三個,bzCheck相關聯,如下所示:添加對象關聯兩個現有對象
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)
,然後添加並提交他們。一切安好。
但現在,讓我們假設我有一個現有的實例和現有的Bugzilla,並希望他們交往:
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未使用序列而不是使用外鍵「testInstance.id」...我不明白爲什麼。 在提交對象後嘗試修改對象時,我遇到過類似的問題;我應該錯過一些基本的東西,但是什麼?
爲什麼你不使用最新版本,.7? – 2012-01-09 18:43:21
,因爲最終使用它的機器運行的發行版只有0.5.8,我想避免手動安裝 – deubeuliou 2012-01-10 21:43:35