- shared/: enums/constants/pagination/base_model/base_db/base_repository/base_service - apps/constants 与 apps/models/base_model、base_db 改为垫片 - 新增 pagination 单元测试 Co-Authored-By: Claude <noreply@anthropic.com>
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
# +======================================================================
|
|
# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ]
|
|
# +----------------------------------------------------------------------
|
|
# | Copyright (c) 2021-2026 一米阳光团队 版权所有
|
|
# | 开源协议: Apache-2.0
|
|
# +======================================================================
|
|
# 由 apps/models/base_db.py 迁移而来。
|
|
|
|
"""
|
|
数据库操作基类模块
|
|
=============================================================
|
|
|
|
提供数据库模型的通用操作方法,包括:
|
|
- 单条数据保存(save):add + flush,不提交事务
|
|
- 多条数据批量保存(save_all):add_all + flush,不提交事务
|
|
- 数据删除(delete):delete + flush,不提交事务
|
|
|
|
事务边界由 db_session_middleware 统一管理:
|
|
- 请求成功且为写操作 → 自动 commit
|
|
- 请求异常 → 自动 rollback
|
|
- 业务代码无需关心事务提交
|
|
"""
|
|
|
|
import logging
|
|
|
|
from core.database import get_db_session
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class base_db:
|
|
__abstract__ = True
|
|
|
|
def save(self):
|
|
"""
|
|
保存当前实例到数据库
|
|
|
|
将对象添加到会话并 flush(发送 SQL 到数据库获取自增 ID),
|
|
但不提交事务。事务由中间件统一管理。
|
|
|
|
Returns:
|
|
self: 当前实例,支持链式调用。通过 self.id 可获取自增主键。
|
|
"""
|
|
db = get_db_session()
|
|
db.add(self)
|
|
db.flush()
|
|
return self
|
|
|
|
@staticmethod
|
|
def save_all(*args):
|
|
"""批量保存多个实例到数据库"""
|
|
if not args:
|
|
return
|
|
db = get_db_session()
|
|
db.add_all(args)
|
|
db.flush()
|
|
|
|
def delete(self):
|
|
"""从数据库删除当前实例"""
|
|
db = get_db_session()
|
|
db.delete(self)
|
|
db.flush()
|
|
return True
|