查询
基础查询
- all():返回包含所有查询记录的列表
- first():返回查询的第一条记录,如未找到,返回 None
- get(id):传入主键作为参数,如未找到,返回 None
- count():返回查询结果的数量
- first_or_404():返回查询结果的第一条记录,如果未找到,返回 404
- get_or_404(id):传入主键作为参数,如未找到,返回 404
- paginate():返回第一个 Pagination 对象,可对记录进行分页处理
# User 为对应模型类
# 获取 User 第一条记录User.query.first()User.query.first().name # 读取 name 的值
# User 所有记录User.query.all() # 返回:[<User 1>, <User 2>]
# 指定数量User.query.limit(42).all()
# 获取指定键值User.query.get(42) # 返回 <User 1>
# 获取记录数User.query.count()
过滤
- filter():使用指定过滤规则,并返回查询对象
- filter_by():使用指定过滤规则(以关键字表达式形式)
- order_by():根据指定条件对记录进行排序
- group_by():指定条件对记录进行分组
# 返回 name 等于 immwind 的第一条记录User.query.filter_by(name='immwind').first()User.query.fileter(User.name='immwind').first() # 同上
# 排序User.query.order_by(User.name).all()
# 模糊查询User.query.filter(User.name.like('%吴%')).all()
# 使用 getattr 可传递表类和列名User.query.filter(getattr(User, column).like(f'%{吴}%')).all()
# in 查询User.query.filter(User.id.in_([42, 13]))
# not inUser.query.filter(~User.id.in_([42, 13]))
逻辑
from sqlchemy import and_ or_# 需导入模块
# and 查询User.query.filter(User.query.filter(and_(User.name == 'immwind',User.id==42)))User.query.filter(User.name == 'immwind', User.id == 42) #同上
# or 查询ser.query.filter(or_(User.name == 'immwind', User.age == 42))
原生查询
from sqlalchemy import text
# 原生 SQL 语句User.query.from_statement(text("select * from tags where id=:value")).params(value=42)
转 JSON
def to_json(obj): _dict = vars(obj) for i in list(_dict.keys()): if i.startswith('_'): _dict.pop(i) return _dict
data = json.dumps(<data_list>, default=to_json)print(jsonify(data))