码迷,mamicode.com
首页 > 数据库 > 详细

flask_sqlalchemy获取动态 model名称 和 动态查询

时间:2019-08-29 11:58:29      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:connect   中文   dmi   fir   --   查找   repr   imp   conf   

需求

想要实现动态的查询,表名,字段,字段值都不是固定的

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: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名的方法参照:

flask_sqlalchemy获取动态 model名称 和 动态查询

标签:connect   中文   dmi   fir   --   查找   repr   imp   conf   

原文地址:https://www.cnblogs.com/kaerxifa/p/11427852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!