- 一、模型类的创建:
- 二、模型类.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)
生成表的部分字段的展示
下面我们开始查询数据库的数据: (新版本的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 = 12、取所有
# all()或者是first()/last(),不加的话,user返回的是一个select语句 user_all = User.query.filter().all() # all返回的是列表,列表里面是对象(需要循环), [3、取第一条,filter括号中可以加条件 (==) 或者is_]、[ ] # select * from user
user_first = User.query.filter(User.username == 'abc').first() # first返回的是对象(因为就一个) # select * from user where username='abc' limit 14、以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 desc10、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结束
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)