如何在SQLAlchemy中引用多对一关系的子代?

时间:2011-10-28 18:13:24

标签: python sqlalchemy

使用文档中的示例,我有以下代码。当我尝试追加时,我得到错误:

AttributeError: 'NoneType' object has no attribute 'append'    

显然即使不使用appendparent.child也是NoneType。我不知道如何处理这种关系。

Base = declarative_base()

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


class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql://localhost/test", echo=False)
Session = sessionmaker(bind=engine)
session = Session()

metadata = Base.metadata
metadata.drop_all(engine)
metadata.create_all(engine)

parent = Parent()
child = Child()
parent.child.append(child)

1 个答案:

答案 0 :(得分:2)

您设置多对一关系,以便父母可以拥有一个孩子,而孩子可以拥有多个父母。如果这是你的意图,你可以像这样设置孩子:

parent.child = child

然而,孩子可以像这样添加父母:

child.parents.append(parent)

如果这不是您的预期,则必须切换关系,以便父母可以通过设置多对多关系或将多个方向切换为一个来生成多个孩子。