🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在控制器文件中导入需要的模型类 ~~~ from app.admin.model.User import User ~~~ Flask-SQLAlchemy 在 Model 类上提供了 query 属性。当访问它时,会得到一个新的所有记录的查询对象。在使用 all() 或者 first() 发起查询之前可以使用方法 filter() 来过滤记录。如果想要用主键查询的话,也可以使用 get()。 ~~~ user = User.query.filter_by(username='admin').first() ~~~ 查找一条不存在的数据返回None 使用更复杂的表达式查询一些用户: ~~~ User.query.filter(User.username.endswith('@example.com')).all() ~~~ 按某种规则对用户排序: ~~~ User.query.order_by(User.username).all() ~~~ 限制返回用户的数量: ~~~ User.query.limit(1).all() ~~~ 用主键查询用户: ~~~ User.query.get(1) ~~~ 获取数量 ~~~ User.query.count() ~~~ 在视图中查询 当编写 Flask 视图函数,对于不存在的条目返回一个 404 错误是非常方便的。因为这是一个很常见的问题,Flask-SQLAlchemy 为了解决这个问题提供了一个帮助函数。可以使用 get_or_404() 来代替 get(),使用 first_or_404() 来代替 first()。这样会抛出一个 404 错误,而不是返回 None: ~~~ @admin.route('/user/<username>') def show_user(username): user = User.query.filter_by(username=username).first_or_404() return render_template('show_user.html', user=user) ~~~ 模糊查询 ~~~ User.query.filter(User.name.like('xxx%')) ~~~ in查询 ~~~ query.filter(Tags.id.in_([5,6])) ~~~ not in查询 ~~~ query.filter(~Tags.id.in_([1,5,6])) ~~~ and查询 ~~~ from sqlchemy import and_ query.filter(and_(Tags.name == 'Python',Tags.id==2)) ~~~ 或者 ~~~ query.filter(Tags.name == 'Python', Tags.id == 2) ~~~ or查询 ~~~ from sqlalchemy import or_ query.filter(or_(Tags.name == 'Python', Tags.name == 'Flask')) ~~~ 原生查询 ~~~ from sqlalchemy import text query.filter(text('id>=:value1 and id <:value2')).params(value1=2,value2=5) ~~~ 完整sql语句查询 ~~~ query.from_statement(text("select * from tags where id=:value")).params(value=1) ~~~ 原生查询数据数量 ~~~ db.session.execute("SELECT COUNT(*) FROM table").scalar() ~~~ group by统计数据 ~~~ from sqlalchemy import func db.session.query(Model).with_entities(Model.field, func.count(Model.field)).group_by('field').all() ~~~ #### <font color=red>注:如果想返回json格式数据,需要把查询出来的结果处理后在返回</font> 首先定义处理模型对象的函数 ~~~ def to_json(obj): _dict = vars(obj) for i in list(_dict.keys()): if i.startswith('_'): _dict.pop(i) return _dict ~~~ 1. 使用json模块 json模块的dumps方法可以传入default参数自定义序列化处理方法 ~~~ from flask import jsonify import json user = User.get(1) data = json.dumps(user, default=to_json) return jsonify(data)#返回json对象 ~~~ 2. 直接在模型类中定义处理方法 ~~~ class User(db.Model): . . . def obj_json(self): return to_json(self) ~~~