python写一个查询接口

Posted kaerxifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python写一个查询接口相关的知识,希望对你有一定的参考价值。

知识点:

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:admin123456@10.1.71.32: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()

 

 

以上是关于python写一个查询接口的主要内容,如果未能解决你的问题,请参考以下文章

python基础:用户登陆接口

第二十五天接口多态

python写一个简单的接口

基于FeignClient提供简单的用户查询服务

Python如何写get接口或者post接口,提供给别人调用

python写简单的api接口