zoukankan      html  css  js  c++  java
  • 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类名获得实例

  • 相关阅读:
    关于HashMap的线程安全问题
    Java利器之UML类图详解
    mongoDB4.0数据库
    requests-html库render的使用
    爬虫最新的库requests-html库总结
    爬虫多次爬取时候cookie的存储用于登入
    requests模块响应体属性和方法重新整理
    Visual Studio 代码补全功能有时候会失效的原因
    C++Primer笔记——文本查询程序(原创,未使用类)
    Clion 常用快捷键
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11427852.html
Copyright © 2011-2022 走看看