Python实现Mybatis Plus

Python实现Mybatis Plus

from flask import g
from sqlalchemy import asc, desc


class QueryWrapperBuilder:
    conditions = {}
    order_by_info = {}

    def __new__(cls, *args, **kwargs):
        obj = super(QueryWrapperBuilder, cls).__new__(cls)
        return obj

    def __init__(self, obj):
        self.obj = obj
        self.conditions = {}
        self.order_by_info = {}

    @classmethod
    def builder(cls, obj=None):
        """
        :param obj: 数据库模型类
        :return:
        """
        return cls(obj)

    def is_null(self, field):
        self.conditions[field.key] = None == field
        return self

    def is_not_null(self, field):
        self.conditions[field.key] = None != field
        return self

    def eq(self, field, value):
        if value:
            self.conditions[field.key] = field == value
        return self

    def gt(self, field, value):
        if value:
            self.conditions[field.key] = field > value
        return self

    def gte(self, field, value):
        if value:
            self.conditions[field.key] = field >= value
        return self

    def lt(self, field, value):
        if value:
            self.conditions[field.key] = field < value
        return self

    def lte(self, field, value):
        if value:
            self.conditions[field.key] = field <= value
        return self

    # 新增方法
    def between(self, field, value):
        if value and isinstance(value, list):
            self.conditions[field.key] = field.between(value[0], value[1])
        return self

    def in_(self, field, value):
        if value and isinstance(value, list):
            self.conditions[field.key] = field.in_(value)
        return self

    def like(self, field, value):
        if value:
            self.conditions[field.key] = field.like(f'%{value}%')
        return self

    def order_by_desc(self, *fields):
        if fields:
            for field in fields:
                self.order_by_info[field.key] = desc(field)
        return self

    def order_by_asc(self, *fields):
        if fields:
            for field in fields:
                self.order_by_info[field.key] = asc(field)

        return self

    def filter(self):
        return [v for k, v in self.conditions.items()]

    def order_by_filter(self):
        return [v for k, v in self.order_by_info.items()]

    def lambda_query(self):
        return self

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值