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:[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

python写一个查询接口的相关文章

python写一个通讯录V2.0

python写一个通讯录step by step V2.0 引用知识 list + dict用于临时存储用户数据信息 cPickle用于格式化文件存取 依旧使用file来进行文件的存储 解决问题 1.操刀开始去做 原始代码 实现功能(可做模板) 1.判断输入内容是否在给出的menu目录内,在的话,返回对应结果,不在就报错 2.调用os模块的exit功能 3.字典配合循环加上函数实现switch的功能 #!/usr/bin/env python #coding:utf8 #Author:zhuim

[py]python写一个通讯录step by step V3.0

python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输出 2.把日期换算成年龄 3.更新操作做的更优雅 准备工作 db准备 - 创建数据库 mysql> create database txl charset utf8; Query OK, 1 row affecte

用Python写一个ftp下载脚本

用Python写一个ftp下载脚本 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 Ps:少侠我接触Python半个月以来接到的第一个需求,虽然如此简单的一个脚本,少侠我磕磕绊绊却用了将近一天半的时间才写出来,但还是很开心,毕竟也粗来了,废话不多说,切入正题.因为一开始没有用过ftplib模块,所以各种谷歌度娘一堆资料杂乱不堪,话不清,理不乱的,本文实现的功能简单,下面介绍一下,以免误导读者. 需

老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

老男孩教育每日一题-2017-04-17: 使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警. 今天是老男孩教育每日一题陪伴大家的第29天.

python写一个脚本解析文件

Python写一个脚本解析文件 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 需求: 1.去掉空行 2.去掉空行后输出到一个新文件 附加需求(排版):1.'-'缩进n个字符 '-'缩进2n个字符 以此类推 2.'-'开头的所有句子输出在一行 '-'开头的句子输出在一行 以此类推 --------------------------------------------分隔线------------

十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想,比如,当一个usb插入时,在后台自动把usb里的重要文件神不知鬼不觉地拷贝到本地或者上传到某个服务器,就需要特殊的软件辅助. 于是我心想,能不能用python写一个程序,让它在后台运行.每当有u盘插入的时候,就自动拷贝其中重要文件. 如何判断U盘的插入与否? 首先我们打开电脑终端,进入/Volume

python写一个通讯录

闲着没事,用python写一个模拟通讯录,要求要实现常用的通讯录的功能,基本流程如下 ? 接下来就按照这个流程实现各个模块的功能 1. 定义一个类,并初始化 1 import json 2 import time 3 4 5 class Address(object): 6 def __init__(self): 7 with open("通讯录.txt", 'r', encoding='utf-8') as f: 8 self.data = json.loads(f.read())

python写一个简单的接口

写一个接口: 1.用到的模块是flask,flask是一个python的一个web框架,可以用来开发接口和web页面 2. 启动服务的效果是这样的: 用postman测试的结果:

基于zabbix用Python写一个运维流量气象图

前言:同事问我,你写运维平台最先写哪一部分?好吧,还真把我问倒了,因为这是在问最应该放在放在第一位的东西~作为一个工作不足两年,运维不足一年的新手来说,还真不敢妄下评论,其实按照我的思路,觉得最重要的部分肯定是故障处理,报警,但是这一块怎么写?怎么说?肯定不能重复造轮子了,不过我最想写的是报表系统,思路是有的,但是一直耽搁了,详情参考http://youerning.blog.51cto.com/10513771/1708925. 好吧,在回到那个问题,应该先写哪个部分.我没回答,反问他了. 他