158 lines
3.9 KiB
Python
158 lines
3.9 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
|
||
from datetime import datetime
|
||
from django.db.models.query import QuerySet
|
||
from django.db import models
|
||
|
||
from web.manager.snowflake_manager import SnowflakeManager
|
||
|
||
|
||
class BaseDao:
|
||
"""
|
||
dao基类
|
||
"""
|
||
|
||
# 子类必须覆盖这个
|
||
model_class = models.Model
|
||
save_batch_size = 1000
|
||
|
||
snowflake_manager = SnowflakeManager()
|
||
|
||
def save(self, obj):
|
||
"""
|
||
添加
|
||
"""
|
||
|
||
if not obj:
|
||
return False
|
||
obj.id = self.snowflake_manager.next_id()
|
||
obj.create_time = datetime.now()
|
||
obj.save()
|
||
return True
|
||
|
||
def save_batch(self, objs, *, batch_size=save_batch_size):
|
||
"""
|
||
批量添加
|
||
"""
|
||
|
||
if not objs:
|
||
return False
|
||
for obj in objs:
|
||
obj.id = snowflake.next_id()
|
||
self.model_class.objects.bulk_create(objs, batch_size=batch_size)
|
||
return True
|
||
|
||
def delete(self, obj):
|
||
"""
|
||
删除
|
||
"""
|
||
|
||
if not obj:
|
||
return False
|
||
obj.delete()
|
||
return True
|
||
|
||
def delete_batch(self, objs):
|
||
"""
|
||
批量删除
|
||
"""
|
||
|
||
if not objs:
|
||
return False
|
||
for obj in objs:
|
||
self.delete(obj)
|
||
return True
|
||
|
||
def delete_batch_by_query(self, filter_kw: dict, exclude_kw: dict):
|
||
"""
|
||
根据条件,批量删除
|
||
"""
|
||
|
||
self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw).delete()
|
||
return True
|
||
|
||
def delete_by_fake(self, obj):
|
||
"""
|
||
假删除/伪删除
|
||
"""
|
||
|
||
if obj is None:
|
||
return False
|
||
obj.is_deleted = True
|
||
obj.save()
|
||
return True
|
||
|
||
def update(self, obj):
|
||
"""
|
||
更新
|
||
"""
|
||
|
||
if not obj:
|
||
return False
|
||
obj.save()
|
||
return True
|
||
|
||
def update_batch(self, objs):
|
||
"""
|
||
批量更新
|
||
"""
|
||
|
||
if not objs:
|
||
return False
|
||
for obj in objs:
|
||
self.update(obj)
|
||
return True
|
||
|
||
def update_batch_by_query(self, query_kwargs: dict, exclude_kw: dict, newattrs_kwargs: dict):
|
||
"""
|
||
根据条件,批量更新
|
||
"""
|
||
|
||
self.model_class.objects.filter(**query_kwargs).exclude(**exclude_kw).update(**newattrs_kwargs)
|
||
|
||
def find_one(self, filter_kw: dict, exclude_kw: dict, order_bys: list):
|
||
"""
|
||
根据条件,返回一条记录
|
||
"""
|
||
|
||
qs = self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw)
|
||
if order_bys:
|
||
qs = qs.order_by(*order_bys)
|
||
return qs.first()
|
||
|
||
def find_queryset(self, filter_kw: dict, exclude_kw: dict, order_bys: list) -> QuerySet:
|
||
"""
|
||
根据条件,返回QuerySet
|
||
"""
|
||
if order_bys != None and len(order_bys) != 0:
|
||
query_set = self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw)
|
||
for by in order_bys:
|
||
query_set = query_set.order_by(by)
|
||
return query_set
|
||
else:
|
||
return self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw)
|
||
|
||
def find_list(self, filter_kw: dict, exclude_kw: dict, order_bys: list) -> list:
|
||
"""
|
||
根据条件,返回对象列表
|
||
"""
|
||
|
||
queryset = self.find_queryset(filter_kw, exclude_kw, order_bys)
|
||
model_instances = [model for model in queryset]
|
||
return model_instances
|
||
|
||
def is_exists(self, filter_kw: dict, exclude_kw: dict) -> bool:
|
||
"""
|
||
根据条件,判断记录是否存在
|
||
"""
|
||
|
||
return self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw).exists()
|
||
|
||
def get_count(self, filter_kw: dict, exclude_kw: dict) -> int:
|
||
"""
|
||
根据条件,计数
|
||
"""
|
||
|
||
return self.model_class.objects.filter(**filter_kw).exclude(**exclude_kw).count()
|