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()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM