flask数据库过滤条件
过滤是数据提取的一个重要功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的
equals
1.query.filter(User.name == 'ed')
not equals
1.query.filter(User.name != 'ed')
like
1.query.filter(User.name.like('%ed%'))
in
1.query.filter(User.name.in_(['ed','wendy','jack']))
2.# 同时,in也可以作用于一个Query
3.query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))
not in
1.query.filter(~User.name.in_(['ed','wendy','jack']))
and
1.from sqlalchemy import and_
2.query.filter(and_(User.name=='ed',User.fullname=='Ed Jones'))
3.# 或者是传递多个参数
4.query.filter(User.name=='ed',User.fullname=='Ed Jones')
5.# 或者是通过多次filter操作
6.query.filter(User.name=='ed').filter(User.fullname=='Ed Jones')
or
1.from sqlalchemy import or_
2.query.filter(or_(User.name=='ed',User.name=='wendy'))
is null
1.query.filter(User.name==None)
2.# 或者是
3.query.filter(User.name.is_(None))
is not null
1.query.filter(User.name != None)
2.# 或者是
3.query.filter(User.name.isnot(None))
flask数据库模型建立外键关系
在Mysql中,外键可以让表之间的关系更加紧密。而SQLAIchemy同样也支持外键。通过ForeignKey类来实现,而且可以指定表的外键约束
from sqlalchemy import ForeignKey
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50))
content = Column(TEXT, nullable=False)
uid = Column(Integer, ForeignKey('user.id', ondelete='RESTRICT'))
外键约束
1.RESTRICT: 父表数据被删除,会阻止删除。默认就是这一项。
2.NO ACTION:在MySQL中,同RESTRICT。
3.CASCADE:级联删除。
4.SET NULL:父表数据被删除,子表数据会设置为NULL。
表格一对多关系
form sqlalchemey.orm import relationship
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
article = relationship('Article')
class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50))
content = Column(TEXT, nullable=False)
uid = Column(Integer, ForeignKey('user.id', ondelete='RESTRICT'))
author = relationship('User')