我一直在处理一对多和多对一的关系,我发现sqlalchemy文档和flask-sqlalchemy文档之间的文档不同。
SqlAlchemy声明Relationship()
应该在父级中,而Fk-Column
应该在子级中。 Flask-Sqlalchemy声明它应该都在孩子身上。
烧瓶SQLAlchemy的:
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
category = db.relationship('Category',
backref=db.backref('posts', lazy='dynamic'))
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
SQLAlchemy的:
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship("Child", backref="parent")
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
哪一个是正确的,和/或有什么区别?
答案 0 :(得分:3)
他们都是正确的。 SQLAlchemy和Flask-SQLAlchemy都没有直接说明关系的位置,尽管他们的例子可能偏向于另一个。唯一的区别是第一个示例关系具有backref,因此可以从两个模型访问该关系,而不是第二个示例,其中只有Parent模型具有关系属性。
在大多数情况下,我将关系添加到具有外键的同一模型,以及backref,以便可以从相关模型访问它。您可能只需要一方面的关系,因此在决定做什么时,这取决于您的具体用例。另一种情况是,您希望使用back_populates
而不是backref
在两个模型上明确定义关系。