查询 §
基础查询 §
- 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 in
User.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))
参考 §