适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

flask-sqlalchemy 生成filter query 的一种方法

浏览量:164 作者:admin 类别:: 学习小记 更新时间:2024-06-01 23:07:16

from flask_sqlalchemy import SQLAlchemy  
from sqlalchemy import and_, or_  
  
db = SQLAlchemy()  
  
class MyModel(db.Model):  
    field1 = db.Column(db.Integer)  
    field2 = db.Column(db.String)  
    # 其他字段...  
  
def build_comparison(model, field, operator, value):  
    # 映射字符串运算符到 SQLAlchemy 方法  
    operators = {  
        '==': lambda f: f == value,  
        '>': lambda f: f > value,  
        '<': lambda f: f < value,  
        '>=': lambda f: f >= value,  
        '<=': lambda f: f <= value,  
        '!=': lambda f: f != value,  
        # 可以根据需要添加更多运算符  
    }  
  
    # 获取模型的字段属性  
    field_attr = getattr(model, field)  
  
    # 使用映射的运算符来构建比较表达式  
    if operator in operators:  
        comparison = operators[operator](field_attr)  
        return comparison  
    else:  
        raise ValueError(f"Unsupported operator: {operator}")  
  
def build_query(model, conditions):  
    query = model.query  
  
    # 如果提供了 conditions,则使用 or_ 连接它们  
    if conditions:  
        filters = []  
        for field, operator, value in conditions:  
            comparison = build_comparison(model, field, operator, value)  
            filters.append(comparison)  
  
        # 使用 or_ 将所有比较表达式连接起来  
        query = query.filter(or_(*filters))  
  
    return query  
  
# 示例条件  
conditions = [['field1', '>', 10], ['field2', '<=', 'valueB']]  
  
# 构建查询  
query = build_query(MyModel, conditions)  
  
# 执行查询并获取结果  
results = query.all()  
for result in results:  
    print(result)

关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...