需求
想要实现动态的查询,表名,字段,字段值都不是固定的
1 obj=表名.query.filter_by(字段=值1).first() 2 3 obj.字段=值2
首先动态获取db_model名字
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:[email protected]: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名呀)
https://segmentfault.com/q/1010000011702302
获得model名的方法参照:
原文地址:https://www.cnblogs.com/kaerxifa/p/11427852.html
时间: 2024-10-11 21:33:31