2017-03-02 54 views
3

我試圖與SQLAlchemy的一個圓形的一對一關係(不知道正確的說法是什麼),看起來如下:SQLAlchemy的圓形的一對一關係

class Parent(Base): 
    __tablename__ = 'parents' 
    id = db.Column(Integer, primary_key=True) 
    child_id = db.Column(db.Integer,db.ForeignKey("children.id", use_alter=True)) 
    child = db.relationship("Child", 
         uselist=False, 
         foreign_keys=[child_id], 
         post_update=True) 

class Child(Base): 
    __tablename__ = 'children' 
    id = db.Column(db.Integer, primary_key=True) 
    parent_id = db.Column(db.Integer, db.ForeignKey("parents.id")) 
    user = db.relationship("Parent", 
         uselist=False, 
         foreign_keys=[parent_id]) 

一切正常預計,直到我嘗試db.drop_all(),我得到一個錯誤,sqlalchemy.sql.schema.ForeignKeyConstraintnameNone。試圖製作這種循環的一對一關係時,我做錯了什麼?我真的希望能夠查詢只有一列獲得另一列的ID,因此是循環引用。

+1

複數表名應爲非法:d –

+0

你試過'孩子= db.relationship (「Child」,cascade =「all,delete」)'? –

+0

添加一個完整的回溯到您的文章。 – RazerM

回答

3

SQLAlchemy Docs

class Parent(Base): 
    __tablename__ = 'parent' 
    id = Column(Integer, primary_key=True) 
    child = relationship("Child", uselist=False, back_populates="parent") 

class Child(Base): 
    __tablename__ = 'child' 
    id = Column(Integer, primary_key=True) 
    parent_id = Column(Integer, ForeignKey('parent.id')) 
    parent = relationship("Parent", back_populates="child") 

然後你就可以Parent.child或Child.parent整天