知识点:

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. python学习第五十二天logging模块的使用

    很多程序都有记录日志的需求,并且日志包含的信息即有正常的程序访问日志,还可能有错误,警告等信息输出,python的 logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  2. 解决PKIX path building failed的问题

    Java在请求某些不受信任的https网站时会报:PKIX path building failed 解决方法一:使用keytool手动导入证书,为JRE环境导入信任证书 参考:http://www. ...

  3. tornado + nginx + supervisord 环境部署

    学习tornado有一周多了,自己按着demo中的例子手动搬代码,收获还是有的,加深了理解.demo: http://demo.pythoner.com/itt2zh/ch8.html 大概明白了它怎 ...

  4. JS中对数组元素进行增、删、改、查的方法,以及其他方法

    前言 昨天联调一个页面,看着就一个页面,接口倒是不少. 热点问题配置测试联调完成(同步异步接口共11个) 1.配置新增 2.配置编辑 3.配置删除 4.热点问题新增 5.热点问题编辑 6.热点问题删除 ...

  5. Centos克隆虚拟机后配置网络

    修改网卡相关信息,复制第二个网卡的mac地址. vim /etc/udev/rules.d/70-persistent-net.rules 修改网卡的信息 vim /etc/sysconfig/net ...

  6. python 调用dll 动态链接库 结构体参数及回调函数等示例

    结构体示例: 这里是 C 代码的部分,主要是结构体的声明和回调函数定义. // 新版本定义 typedef enum { DevCard, DevLocator, DevReader } DevTyp ...

  7. Spring基础14——Bean的生命周期

    1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理 ...

  8. 利用mysql中if函数排序

    格式:IF(Condition,A,B) 意义:当Condition为TRUE时,返回A:当Condition为FALSE时,返回B. 作用:作为条件语句使用. select if(`from_use ...

  9. linux ab 压测

    https://www.cnblogs.com/shenshangzz/p/8340640.html https://www.cnblogs.com/shenshangzz/p/8340640.htm ...

  10. noip级别模板小复习

    不是很noip的知识点就不写了. dij什么的太easy就不写了. 缩点 注意\(Tarjan\)在缩边双和求强联通分量时候的区别. 一个要判断是否在栈内一个不要. 最后\(topsort\)来\(d ...