flask_sqlalchemy獲取動態 model名稱 和 動態查詢


需求

想要實現動態的查詢,表名,字段,字段值都不是固定的

1 obj=表名.query.filter_by(字段=值1).first() 2 
3 obj.字段=值2

 

首先動態獲取db_model名字(即Role)

 1 class Role(db.Model):  2     __tablename__ = 'roles'
 3     id = db.Column(db.Integer, primary_key=True)  4     name = db.Column(db.String(64))  5     email=db.Column(db.String(64))  6 
 7     def __repr__(self):  8         return '<Role %r>' % self.name  9 
10 aa = globals()["Role"]

注意:

 ------如果在其它module,先import導入該module
import module
clazz= getattr(module, 'classname')
instance = clazz()

 

驗證結果:

obj = aa.query.get(1) print(obj) #可以正常得到查詢結果

動態查詢條件:

filter_by用於查詢簡單的列名,不支持比較運算符

filters={'name':'lisa'} obj = db_model.query.filter_by(**filters).first()

驗證結果:

print(obj) #結果 <Role 'lisa'>

 完整代碼 :

 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 
34 #獲取model名
35 db_model = globals()["Role"] 36 print(db_model) 37 
38 #驗證
39 obj= db_model.query.get(1) 40 #使用filter_by動態查詢查詢
41 filters={'name':'lisa'} 42 obj = db_model.query.filter_by(**filters).first() 43 print(obj)

 

參照文檔:

Flask-SQLALchemy動態的filter_by和filter

 

從之篇文章明確了自己想要查找的到底是什么問題(就是動態獲取 model名呀)

動態綁定flask-sqlalchemy的model

https://segmentfault.com/q/1010000011702302

 

獲得model名的方法參照:

python中通過string類名獲得實例


免責聲明!

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



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