我是SQLAlchemy的新手,我试图运行其文档中提供的示例Basic Relationship Patterns - One to One Relationship。但是当我尝试实例化Parent类时,我遇到了麻烦。
基本上,我所拥有的是:
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("Child", back_populates="child")
p1 = Parent()
这些表格是由.tables在sqlite>列出的。提示,但是在行p1 = Parent()我得到了这个:
sqlalchemy.exc.ArgumentError:关系上的reverse_property'parent'Parent.child引用关系Child.parent,它不引用mapper Mapper | Parent | parent
对于一对多的关系不会发生这种情况,对于这段代码,我会按照我的预期打印 [] 和无:
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
addresses = relationship("Address", back_populates="user")
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
email = Column(String)
user_id = Column(Integer, ForeignKey('user.id'))
user = relationship("User", back_populates="addresses")
u1 = User()
a1 = Address()
print(u1.addresses)
print(a1.user_id)
所以,我不太明白SQLAlchemy错误消息试图告诉我的内容。
有人可以帮忙吗?
答案 0 :(得分:1)
好的,文档代码中存在明显的错误。我发布这个以防万一其他人遇到同样的问题。
基本上,儿童类中的关系行必须是父类,不到儿童< strong>类本身,如文档中所述。
此代码已更正并按预期工作(标记为已修改的部分):
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")
^^^^^^
p1 = Parent()
c1 = Child()
print(p1.id)
print(c1.parent_id)
按预期打印无和无。
这就是全部!