ken*_*ait 18 python sqlalchemy flask flask-sqlalchemy
在 Flask-SQLAlchemy 中,关系方法中的 backref 参数允许您在指定的类下声明一个新属性,如其文档中的示例所示:
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'))
Run Code Online (Sandbox Code Playgroud)
但是还有一个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')
Run Code Online (Sandbox Code Playgroud)
在这种情况下,backref传递给backref参数的函数的作用是什么,尤其是多个lazy定义?它与 有什么不同backref='person'?
Ric*_*Han 10
来自Flask 模型的文档:
backref也是在 Address 类上声明新属性的一种简单方法。然后,您还可以使用my_address.person访问该地址的人。lazy定义 SQLAlchemy 何时从数据库加载数据:
select (这是默认设置)意味着 SQLAlchemy 将使用标准的 select 语句根据需要一次性加载数据。
joined 告诉 SQLAlchemy 使用 JOIN 语句在与父级相同的查询中加载关系。
subquery 像“joined”一样工作,但相反,SQLAlchemy 将使用子查询。
dynamic如果你有很多物品,它是特别和有用的。SQLAlchemy 不会加载项目,而是返回另一个查询对象,您可以在加载项目之前进一步细化。如果您期望这段关系中的项目不止少数,这通常就是您想要的。
| 归档时间: |
|
| 查看次数: |
13837 次 |
| 最近记录: |