zoukankan      html  css  js  c++  java
  • 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()

     

  • 相关阅读:
    BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)
    BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
    BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)
    hdu3873 有约束条件的最短路
    尺取法 poj3061 poj3320
    费马小定理与欧拉公式
    uva 571 素数的性质
    uva10791 uva10780(分解质因数)
    勾股数组及其应用uva106
    hdu3501
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11422442.html
Copyright © 2011-2022 走看看