flask_sqlalchemy获取动态 model名称 和 动态查询
查询 获取 动态 Flask model 名称 SqlAlchemy
2023-09-27 14:25:18 时间
需求
想要实现动态的查询,表名,字段,字段值都不是固定的
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名呀)
https://segmentfault.com/q/1010000011702302
获得model名的方法参照:
python中通过string类名获得实例
相关文章
- Druid 如何开启查询日志
- 94.(后端)分类参数ID获取接口实现——restful发送请求查询数据
- jeecg Datagrid 获取列表 查询语句 调用存储过程
- RAC:Oracle11gR2:群集的起、停、状态查询
- 添加了外键moddle,查询时获取外键的 数据信息
- SQLSERVER 执行过的语句查询
- 【Python】列表的基础操作:查询(获取列表指定元素的索引、获取单个元素、获取多个元素(切片 操作))
- Redis命令时间复杂度查询表
- TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。
- Oracle创建用户并给用户授权查询指定表或视图的权限
- 【云图】怎样制作全国KTV查询系统?
- mysql查询优化技巧
- 【慕课网】如何实现 可迭代对象和迭代器对象(天气查询)
- 在 CSS 中使用特征查询
- elasticsearch查询之图书智能推荐
- 【转载】如何在MySQL存储过程中遍历查询结果集