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