Flask—使用各种条件查询数据库中的数据

Flask—使用各种条件查询数据库中的数据,第1张

Flask—使用各种条件查询数据库中的数据

文章目录
        • 一、模型类的创建:
        • 二、模型类.query的查询
          • 1、根据主键查询用户使用get(主键值),返回值是一个对象
          • 2、取所有
          • 3、取第一条,filter括号中可以加条件 (==) 或者is_
          • 4、以xx开头或结尾 startswith、endswith
          • 5、或条件 or_
          • 6、与条件 and_
          • 7、非条件 not_
          • 8、in条件 in_
          • 9、排序 order_by
          • 10、limit 限制
      • 三、重点总结内容:

查询时因为没有表,所以我先创建了表,有表的可直接查询。。。

一、模型类的创建:
# __init__.py

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, nullable=False, autoincrement=True, primary_key=True)
    username = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(128), nullable=False)
    phone = db.Column(db.String(15), nullable=True, unique=True)
    create_at = db.Column(db.DateTime, default=datetime.now)
    is_delete = db.Column(db.Boolean, default=False)

生成表的部分字段的展示

idusernamepasswordcreate_at1abcxxxxxx2yyyxxxxxx3abcxxxxxx

下面我们开始查询数据库的数据: (新版本的pycharm不提示query)

二、模型类.query的查询
首先导入:
 	from sqlalchemy import or_,and_.not_
	from xx import User # User是一个创建user表的类
1、根据主键查询用户使用get(主键值),返回值是一个对象
user = User.query.get(1)
#  select * from user where id = 1 
2、取所有
# all()或者是first()/last(),不加的话,user返回的是一个select语句
user_all = User.query.filter().all()  # all返回的是列表,列表里面是对象(需要循环),  []、[]
# select * from user
3、取第一条,filter括号中可以加条件 (==) 或者is_
user_first = User.query.filter(User.username == 'abc').first()  # first返回的是对象(因为就一个)
# select * from user where username='abc' limit 1
4、以xx开头或结尾 startswith、endswith
user_list_swith = User.username.filter(User.username.startswith('a')).all  
# select * from user where like 'a%' 找到名字以'a'开头的所有用户
5、或条件 or_
user_list_or_ = User.query.filter(or_(User.username.like("w%"), User.username.contains("a"))).all()
# select * from user where username like "w%" or username like "%a%"
6、与条件 and_
user_list_and_ = User.query.filter(and_(User.username.contains("z%"),
									 User.create_at.__eq__('2021-10-23 23:49:09')
									 )
								).all() 
# 把__eq__ 换成 =,也是可以的
# select * from user where username like "%z%" and create_at = "2021-10-23 23:49:09"
7、非条件 not_
user_list_not_ = User.query.filter(not_(User.username.contains('w'))).all()
# select * from user where username not like '%w%'  否定条件
8、in条件 in_
user_list_in_ = User.query.filter(User.phone.in_(['123456789','8767465327'],)).all()
# select * from user where phone in ('123456789','8767465327')
9、排序 order_by
user_list_order = User.query.order_by(User.id).all()  # 根据字段排序 加-User.id 是降序
# select * from user order by id 
user_list_order_by = User.query.filter(not_(User.username.contains('c'))).order_by(-User.create_at).all()
# select * from user where username not like '%c%' order by create_at desc
10、limit 限制
user_list_limit = User.query.limit(2).all()
# select * from user limit 2
user_list__offset_limit = User.query.offset(2).limit(2).all() # 跳过两条,再取两条
# select * from user limit 2,2
三、重点总结内容:

(1).一般查询:
  User.query.filter() # 按条件查询 (主要的)

  1、User.query.filter().all()  # 所有
  2、User.query.get()     # 获取一个
  3、User.query.filter().first()  # 第一个
  4、User.query.filter(User.username.startswith(’’)).all()   # 按xx开头查询
  5、User.query.filter(User.username.endswith(’’))   # 按xx结尾查询
  6、User.query.filter(User.username.like(‘xx%’))    # 按xx%查询
  7、User.query.filter(User.username.contains(‘xx’))   # 含有xx内容的查询
  8、User.query.filter(User.username.in_([‘A’,‘B’,‘C’]))   # 查询有A、B、C内容
  9、User.query.filter(User.username == ‘A’)   # 查询等于A

(2).如果要检索的字段是-> 整形/日期类型/范围:
  User.age._lt_(18)
  User.create_at._gt_(‘2021-10-10’)
  User.age.between(15,30)
  有这么多:_lt_、_le_、_gt_、_ge_、_eq_、contains、like. # 当然也可以用 >,<, >=, <=,!= 更方便

(3).多个条件一起检索:and_ ,or_

(4).非得条件:not_

(5).排序内容:
  User.query.order_by(User.id).all()

  User.query.filter(User.create_at > ‘xx’)order_by(User.create_at).all()
    # 先筛选日期大于xx,然后在升序排列

  User.query.filter(User.create_at > ‘xx’)order_by(-User.create_at).all()
    # 先筛选日期大于xx,然后在降序排列

注意:order_by(参数)
    1.直接是字符串: ‘字段名’ 但是不能倒序
    2.填写字段名: 模型.字段 order_by(-模型.字段) 倒序
    offset(2).limit(2).all offset先偏移2个,然后再取2条记录,从3开始,到4结束

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4827708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-10
下一篇 2022-11-10

发表评论

登录后才能评论

评论列表(0条)

保存