20201030-第九讲-flask数据库过滤条件、外键及约束

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')

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容