在Flask SQLAlchemy中,relationship方法中的backref参数允许您在指定类下声明一个新属性,如示例中的docs所示:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person', lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
但是还有一个
backref
函数:class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address',
backref=db.backref('person', lazy='joined'),
lazy='dynamic')
在这种情况下,传递给
backref
参数的backref
函数的作用是什么,特别是在多个lazy
定义中它与backref='person'
有何不同? 最佳答案
从文档中:
backref是在Address类上声明新属性的简单方法你也可以用我的地址找到那个地址的人lazy定义sqlalchemy何时从数据库加载数据:
“select”(这是默认值)意味着SQLAlchemy将使用标准的select语句一次性加载所需的数据。
“joined”告诉sqlalchemy使用join语句在与父查询相同的查询中加载关系。
“subquery”的工作方式类似于“joined”,但sqlalchemy将使用子查询。
“dynamic”是特别的,如果您有很多项,它会很有用SQLAlchemy将返回另一个查询对象,您可以在加载项之前进一步优化该对象,而不是加载项这通常是你想要的,如果你对这段关系的期望超过了一小部分。
src:http://flask-sqlalchemy.pocoo.org/2.1/models/
关于python - Flask-SQLAlchemy backref函数和backref参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44538911/