知识点:
1.flask_sqlalchemy查询:
Flask-SQLAlchemy 在您的 Model
类上提供了 query
属性。当您访问它时,您会得到一个新的所有记录的查询对象。在使用 all()
或者 first()
发起查询之前可以使用方法 filter()
来过滤记录。如果您想要用主键查询的话,也可以使用 get()
2.flask视图
3.熟练sql查询
前置条件:
本地数据库创建一个测试库(test)&表(roles),该表只有2个字段,id,name,结构如图:
示例:
通过1个字段简单的查询 :
#通过用户名查询用户 lisa= Role.query.filter_by(name=‘张飞‘).first()
注意:如果查询一个不存在的用户名返回 None:
复杂一点带条件的查询:
#带表达式的查询 obj = Role.query.filter(Role.email.endswith(‘@163.com‘)).all() print(obj)#[<Role ‘曹操‘>, <Role ‘lisa‘>]
排序
#按某种规则对用户排序 obj1 = Role.query.order_by(Role.name).all() print(obj1)#[<Role ‘bob‘>, <Role ‘lisa‘>, <Role ‘张飞‘>, <Role ‘曹操‘>]
限制返回数量
1 #限制返回用户的数量 2 obj2= Role.query.limit(1).all() 3 print(obj2)#[<Role ‘曹操‘>]
用主键查询
#用主键id obj3 = Role.query.get(1) print(obj3)#<Role ‘曹操‘>
在flask视图中查询:
当您编写 Flask 视图函数,对于不存在的条目返回一个 404 错误是非常方便的。因为这是一个很常见的问题,Flask-SQLAlchemy 为了解决这个问题提供了一个帮助函数。可以使用 get_or_404()
来代替 get()
,使用 first_or_404()
来代替 first()
。这样会抛出一个 404 错误,而不是返回 None
#在视图中查询 @app.route(‘/role/<id>‘) def show_user(id): # role = Role.query.filter_by(name=rolename).first_or_404() role = Role.query.get_or_404(id,"not find ") return jsonify({‘id‘:role.id,‘name‘:role.name,‘email‘:role.email})
完整代码:
1 #导入依赖 2 from flask import Flask,jsonify 3 from flask_sqlalchemy import SQLAlchemy 4 #创建一个服务 5 app = Flask(__name__) 6 7 #配置app属性 8 # 设置连接数据库的URL 9 app.config[‘SQLALCHEMY_DATABASE_URI‘] =‘mysql+mysqlconnector://root:[email protected]:3306/test‘ 10 11 # 设置每次请求结束后会自动提交数据库的改动 12 app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True 13 app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = True 14 15 # 查询时显示原始SQL语句 16 app.config[‘SQLALCHEMY_ECHO‘] = False 17 18 #response显示中文json, 19 app.config[‘JSON_AS_ASCII‘]=False 20 21 #生成一个sqlalchemy对象 22 db = SQLAlchemy(app) 23 24 #创建模型,在python中通过Role类映身roles表 25 class Role(db.Model): 26 __tablename__ = ‘roles‘ 27 id = db.Column(db.Integer, primary_key=True) 28 name = db.Column(db.String(64)) 29 email=db.Column(db.String(64)) 30 31 def __repr__(self): 32 return ‘<Role %r>‘ % self.name 33 41 #通过用户名查询用户 42 lisa= Role.query.filter_by(name=‘张飞‘).first() 43 # print(type(lisa),lisa) #<class ‘__main__.Role‘> <Role ‘张飞‘> 44 45 #带表达式的查询 46 obj = Role.query.filter(Role.email.endswith(‘@163.com‘)).all() 47 # print(obj)#[<Role ‘曹操‘>, <Role ‘lisa‘>] 48 49 #按某种规则对用户排序 50 obj1 = Role.query.order_by(Role.name).all() 51 # print(obj1)#[<Role ‘bob‘>, <Role ‘lisa‘>, <Role ‘张飞‘>, <Role ‘曹操‘>] 52 53 #限制返回用户的数量 54 obj2= Role.query.limit(1).all() 55 # print(obj2)#[<Role ‘曹操‘>] 56 57 #用主键id 58 obj3 = Role.query.get(1) 59 print(obj3)#<Role ‘曹操‘> 60 70 #在视图中查询 71 @app.route(‘/role/<id>‘) 72 def show_user(id): 73 # role = Role.query.filter_by(name=rolename).first_or_404() 74 role = Role.query.get_or_404(id,"not find ") 75 return jsonify({‘id‘:role.id,‘name‘:role.name,‘email‘:role.email}) 76 77 if __name__ == ‘__main__‘: 78 app.run(debug=True)
运行结果:
运行程序,在浏览器中输入:http://127.0.0.1:5000/role/1
1.输入1个存在的id:
2.输入1个不存在的id:
可以在这里自定义提示信息:
1 role = Role.query.get_or_404(id,"not find ")
其它:
flask-sqlalchemy的增删改查操作参见文档,描写的很清晰了:
选择(Select),插入(Insert), 删除(Delete)
http://www.pythondoc.com/flask-sqlalchemy/queries.html
修改数据
1 user = User.query.get(20) 2 3 user.name =‘小名‘ 4 5 db.session.commit()
原文地址:https://www.cnblogs.com/kaerxifa/p/11422442.html
时间: 2024-10-11 04:30:07