class Country(db.Model):
__tablename__ = 'countries'
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.Integer)
name_en = db.Column(db.String(100))
user_country = db.relationship('User', backref='country')
company_country = db.relationship('Company', backref='country')
在这个例子中,我重写了表名。那么,背反应该是什么? tablename
或班级名称?或者可以是其他什么?
来自文档:
backref是一种在xxxxx类上声明新属性的简单方法
那么,backref
的名称只是一般性描述?
如果我有两张表使用国家表,我需要创建两个关系,就像在我的例子中一样?该程序是另一个表中每个参考的一个关系吗?
答案 0 :(得分:1)
您可以参考此示例。
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'))
将Child存储在Parent中
获取父对象。
p = Parent.query.get(1)
使用backref存储在子对象中
c = Child(parent=p)
db.session.add(c)
db.session.commit()
要通过子对象访问parend,您将遵循此操作。 制作对象。
child = Child ()
通过backref访问。
child.parent.
答案 1 :(得分:0)
喜欢这个?这将使user.country变成类似模型的东西
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
country = db.relationship("Country", backref="users")
class Country(db.Model):
__tablename__ = 'countries'
id = db.Column(db.Integer, primary_key=True)
user_country_id = db.Column(db.Integer, db.ForeignKey('users.id'))
user_country = db.relationship("User")
答案 2 :(得分:0)
确实很困惑。 sqlalchemy的文档冗长乏味,难以理解。
那么,背反应该是什么?表名或类名?或者可以是其他什么?
其他任何东西都可以成为背反名称
那么,backref的名称只是一般描述?
是的,它会动态地在您的类(换句话说,表)中添加一个属性。
因为SQLAlchemy使用元类,所以在您创建至少一个Client类的实例之前,在另一个类上创建后引用的代码将不会运行。
有关详细信息,请参阅backref-class-attribute,例如Subject.client
访问backref。
如果我有两张表使用国家表,我需要创建两个关系,就像在我的例子中一样?该程序是另一个表中每个参考的一个关系吗?
听起来你想要多对多的关系。 association-table和flask-doc都可以提供帮助。
希望它有所帮助:)