python sqlalchemy多表关联提交

时间:2017-03-03 05:11:38

标签: python sqlalchemy

这样的关系:

a->b one->many
a->c one->many
b->c one->many

这是一个示例代码:

class A(Base):
    __tablename__ = "a"
    id = Column(Integer, primary_key=True, nullable=False)
    b = relationship("A", backref="a")

class B(Base):
    __tablename__ = "b"
    id = Column(Integer, primary_key=True, nullable=False)
    a_id = Column(Integer, ForeignKey("a.id"))
    c = relationship("C", backref="b")

class C(Base):
    __tablename__ = "c"
    id = Column(Integer, primary_key=True, nullable=False)
    a_id = Column(Integer, ForeignKey("a.id"))
    b_id = Column(Integer, ForeignKey("b.id")) 

a = A()
a.b = [B(), B()]

session.add(a)
session.commit()

没关系。但是当我这样使用时:

a = A()
a.b = [B(), B()]
a.b.c = [C(), C()]
session.add(a)
session.commit()

它不起作用。请帮助我,我希望foreignkey自动关联。

1 个答案:

答案 0 :(得分:0)

a.b是根据您的定义的向量。您需要通过first()one()(或类似的,我现在还没有提供SQLA文档)来获取标量并分配给该对象的c属性,I信。