可能楼主已经对 flask 非常了解了,但看到一篇解释的很好,转过来给其他人看吧:
这里说一下对 db.relationship lazy 的理解,看如下代码
class Role (db.Model ):
__tablename__ = 'roles'
id = db.Column (db.Integer, primary_key=True )
name = db.Column (db.String (64 ), unique=True )
users = db.relationship ('User', backref='role', lazy='dynamic')
class User (db.Model ):
__tablename__ = 'users'
id = db.Column (db.Integer, primary_key=True )
username = db.Column (db.String (64 ), unique=True, index=True )
role_id = db.Column (db.Integer, db.ForeignKey ('
roles.id'))
假设 role 是已经获取的一个 Role 的实例
lazy:dynamic => role.users 不会返回 User 的列表, 返回的是 sqlalchemy.orm.dynamic.AppenderBaseQuery 对象
当执行 role.users.all ()是才会真正执行 sql ,这样的好处就是可以继续过滤
lazy:select => role.users 直接返回 User 实例的列表,也就是直接执行 sql
注意: db.session.commit 只有在对象有变化时才会真的执行 update
转自:
http://www.bkjia.com/ASPjc/893049.html