数据库
首页 > 数据库> > python-Flask-SQLAlchemy backref函数和backref参数

python-Flask-SQLAlchemy backref函数和backref参数

作者:互联网

在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函数的作用是什么,尤其是对于多个惰性定义?与backref =’person’有何不同?

解决方法:

从文档:

backref是一种在Address类上声明新属性的简单方法.然后,您也可以使用my_address.person与该地址的人联系.惰性定义SQLAlchemy何时从数据库加载数据:

“ select”(默认设置)意味着SQLAlchemy将使用标准的select语句一次性加载数据.

“ joined”告诉SQLAlchemy使用JOIN语句在与父级相同的查询中加载关系.

‘subquery’的工作方式类似于’joined’,但是SQLAlchemy会使用一个子查询.

如果您有很多项目,那么“动态”特别有用.代替加载项目,SQLAlchemy将返回另一个查询对象,您可以在加载项目之前进一步优化该对象.如果您期望这种关系的项目不多,通常这就是您想要的.

编号:http://flask-sqlalchemy.pocoo.org/2.1/models/

标签:sqlalchemy,flask,flask-sqlalchemy,python
来源: https://codeday.me/bug/20191111/2018678.html