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

需求

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

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名呀)

动态绑定flask-sqlalchemy的model

https://segmentfault.com/q/1010000011702302

获得model名的方法参照:

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

时间: 2024-08-02 02:38:26

flask_sqlalchemy获取动态 model名称 和 动态查询的相关文章

JS获取图片的缩略图,并且动态的加载多张图片

找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js获取缩略图</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <st

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

动态调用WebService时动态获取返回Class中的属性

直接给代码: var ret = HTTPS.WSHelper.InvokeWebService("WebService URL", "MethodName", object[] args);var type = ret.GetType();var propertyinfo = type.GetProperty("result");if (propertyinfo == null){       throw new Exception("

Linq to Sql : 动态构造Expression进行动态查询

原文:Linq to Sql : 动态构造Expression进行动态查询 前一篇在介绍动态查询时,提到一个问题:如何根据用户的输入条件,动态构造这个过滤条件表达式呢?Expression<Func<ProductExt, bool>> predicate t => t.ProductName.Contains("che") && t.UnitPrice >= 22; 理想情况下,我希望可以像下面这样来构造predicate,这样,我

Flink:动态表上的连续查询

用SQL分析数据流 越来越多的公司在采用流处理技术,并将现有的批处理应用程序迁移到流处理或者为新的应用设计流处理方案.其中许多应用程序专注于分析流数据.分析的数据流来源广泛,如数据库交易,点击,传感器测量或物联网设备. Apache Flink非常适合流式分析,因为它提供了事件时间语义支持,恰一次的处理,并同时实现了高吞吐和低延迟.由于这些特性,Flink能够近乎实时地从大量输入流计算确切的和确定性的结果,同时在出现故障时提供恰一次处理的语义. Flink的流处理核心API,DataStream

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理和自定义异常

游标的概念:    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率.游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种 形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要

Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)

一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法.如果公司卖多少钱,代理商也卖多少钱,那么代理商就赚不了钱.所以代理商在调用公司的卖方法后,加上自己的利润然后再把产品卖给客户.而客户部直接跟公司打交道,或者客户根本不知道公司的存在,然而客户最终却买到了产品. 专业点说:代理模式是对象的结构型模式,代码模式给某一个对象提供代理,并由代理对象控制原对象

jdk动态代理和cglib动态代理底层实现原理详细解析(cglib动态代理篇)

代理模式是一种很常见的模式,关于底层原理网上看到很多的有关的讲解,但看了一些都觉得比较粗略,很多时候把底层代码copy下来也不大讲解,感觉不如自己详细的写上一篇.本文将以非常详细的说明来分析cglib动态代理底层的实现原理,篇幅较长,但是每个核心方法代码中每步都有说明.还请耐心阅读 1. 举例 使用cglib代理需要引入两个包,maven的话包引入如下 <!-- https://mvnrepository.com/artifact/cglib/cglib --> <dependency&

代理模式 &amp; Java原生动态代理技术 &amp; CGLib动态代理技术

第一部分.代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务.(其实就是在代理类中关联一个委托类的实例,然后在代理类中进行包装). UML图如下: 第二部分.在Java中实现代理模式  按照代理的创建时期,代理类可以分