知识点:

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 '曹操'>]

限制返回数量

 #限制返回用户的数量
obj2= Role.query.limit(1).all()
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})

完整代码:

 #导入依赖
from flask import Flask,jsonify
from flask_sqlalchemy import SQLAlchemy
#创建一个服务
app = Flask(__name__) #配置app属性
# 设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+mysqlconnector://root:admin123456@10.1.71.32:3306/test' # 设置每次请求结束后会自动提交数据库的改动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 查询时显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = False #response显示中文json,
app.config['JSON_AS_ASCII']=False #生成一个sqlalchemy对象
db = SQLAlchemy(app) #创建模型,在python中通过Role类映身roles表
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
email=db.Column(db.String(64)) def __repr__(self):
return '<Role %r>' % self.name #通过用户名查询用户
lisa= Role.query.filter_by(name='张飞').first()
# print(type(lisa),lisa) #<class '__main__.Role'> <Role '张飞'> #带表达式的查询
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 '曹操'>] #限制返回用户的数量
obj2= Role.query.limit(1).all()
# print(obj2)#[<Role '曹操'>] #用主键id
obj3 = Role.query.get(1)
print(obj3)#<Role '曹操'> #在视图中查询
@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}) if __name__ == '__main__':
app.run(debug=True)

运行结果:

运行程序,在浏览器中输入:http://127.0.0.1:5000/role/1

1.输入1个存在的id:

2.输入1个不存在的id:

可以在这里自定义提示信息:

   role = Role.query.get_or_404(id,"not find ")

其它:

flask-sqlalchemy的增删改查操作参见文档,描写的很清晰了:

选择(Select),插入(Insert), 删除(Delete)

http://www.pythondoc.com/flask-sqlalchemy/queries.html

修改数据

 user = User.query.get(20)

 user.name ='小名'

 db.session.commit()

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

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

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  2. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

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

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  4. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  5. 用vetr.x写一个HTTP接口适配器, 对接各种形式接口

    用vetr.x写一个HTTP接口适配器, 对接各种形式接口 项目地址:https://github.com/hjx601496320/transmit 业务说明 在日常开发工作中,我们经常会遇到要和各 ...

  6. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  7. 用python写一个自动化盲注脚本

    前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...

  8. python写一个能变身电光耗子的贪吃蛇

    python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...

  9. 无监控不运维——使用 Python 写一个小小的项目监控

    在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...

随机推荐

  1. neo4j源码分析1-编译打包启动

    date: 2018-03-22 title: "neo4j源码分析1-编译打包启动" author: "邓子明" tags: - 源码 - neo4j - 大 ...

  2. MFC- 网络编程

    一.MFC网络编程 a)CAsyncSocket用于异步非阻塞类,用UDP通信: b)CAsyncSocket的子类(派生类):Csocket同步阻塞类,用于TCP通信: c)通信前,必须调用AfxS ...

  3. 网络层ddos与应用层ddos区别

    以去银行办业务举例: 网络层ddos是让去往银行的道路交通变得拥堵,无法使正真要去银行的人到达:常利用协议为网络层的,如tcp(利用三次握手的响应等待及电脑tcp连接数限制)等 应用层ddos则是在到 ...

  4. Java组合算法

    这是一个简单的问题,大一刚学编程的时候做的笔记. 打印出从1.2.3……n中取出r个数的不同组合(n>=r>=1) 例如n=3,r=2,输出: 1,2 2,3 下面是实现的代码: publ ...

  5. 04-A的LU分解

    一.矩阵$AB$的逆 $(AB)^{-1}=B^{-1}A^{-1}$,顺序正好相反 二.$A=LU$ 如矩阵: $\left[\begin{array}{ll}{2} & {1} \\ {8 ...

  6. 204-基于Xilinx Virtex-6 XC6VLX240T 和TI DSP TMS320C6678的信号处理板

    基于Xilinx Virtex-6 XC6VLX240T 和TI DSP TMS320C6678的信号处理板 1.板卡概述  板卡由我公司自主研发,基于VPX架构,主体芯片为两片 TI DSP TMS ...

  7. 事件,IO,select

    事件驱动模型 对于普通编程来说,代码遵循线性流程:开始-->代码A-->代码B-->代码C-->...-->结束,编程者知道代码的运行顺序,由编程者控制 事件驱动模型,流 ...

  8. Linux日常之显示文件总结

    1. 将文件file1.file2的内容都显示出来,并显示行号 cat -n file1 file2 2. 将文件file1.file2中带有字符'h'的行显示出来 cat -n file1 file ...

  9. java编写算法题格式(链表和二叉树)

    (1)链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; ...

  10. day4 切片,数据类型

    day5: 序列,可以使用切片 序列类型:字符串,列表,元祖 特点:可以通过坐标来取值,坐标从0开始 >>> s = "agfdagsgsdgsa" >&g ...