Skip to content

Database API

src.app.plugin_system.api.database_api 提供扁平化的数据库操作接口,封装了 CRUD、查询构建器、聚合查询、分页和批量迭代。

导入

python
from src.app.plugin_system.api.database_api import (
    # CRUD
    get_by_id, get_by, get_multi, create, update, delete,
    count, exists, get_or_create, bulk_create, bulk_update,
    # 查询构建器
    query, filter_query, filter_query_first, filter_query_count,
    # 聚合
    aggregate, sum_field, avg_field, max_field, min_field, group_by_count,
    # 迭代器
    iter_batches, iter_all,
    # 分页
    paginate,
)

CRUD 操作

函数说明
get_by_id(model, id) -> T | None按 ID 获取
get_by(model, **filters) -> T | None按条件获取单条
get_multi(model, skip=0, limit=100, **filters) -> list[T]获取多条
create(model, obj_in) -> T创建记录
update(model, id, obj_in) -> T | None更新记录
delete(model, id) -> bool删除记录
count(model, **filters) -> int统计数量
exists(model, **filters) -> bool检查存在
get_or_create(model, defaults=None, **filters) -> tuple[T, bool]获取或创建
bulk_create(model, objs_in) -> list[T]批量创建
bulk_update(model, updates) -> int批量更新
python
user = await get_by_id(UserModel, 1)
users = await get_multi(UserModel, skip=0, limit=50, status="active")
count = await count(UserModel, status="active")

查询构建器

函数说明
query(model) -> QueryBuilder[T]创建查询构建器(支持链式调用)
filter_query(model, **conditions) -> list[T]快速过滤查询
filter_query_first(model, **conditions) -> T | None快速过滤取第一条
filter_query_count(model, **conditions) -> int快速过滤统计
python
# 链式查询
results = await query(UserModel).filter(age__gt=18).order_by("name").all()

# 快速过滤
users = await filter_query(UserModel, status="active", role__in=["admin", "mod"])

聚合查询

函数说明
aggregate(model) -> AggregateQuery创建聚合查询
sum_field(model, field, **filters) -> float求和
avg_field(model, field, **filters) -> float求平均
max_field(model, field, **filters) -> Any最大值
min_field(model, field, **filters) -> Any最小值
group_by_count(model, *fields, **filters) -> list[tuple]分组统计

迭代器(内存优化)

函数说明
iter_batches(model, batch_size=1000, **conditions) -> AsyncIterator[list[T]]分批迭代
iter_all(model, batch_size=1000, **conditions) -> AsyncIterator[T]逐条迭代
python
async for batch in iter_batches(LogModel, batch_size=500, level="ERROR"):
    for log in batch:
        process(log)

分页

paginate(model, page=1, page_size=20, **conditions) -> tuple[list[T], int]

返回 (结果列表, 总数量)

python
items, total = await paginate(UserModel, page=1, page_size=20)

贡献者

The avatar of contributor named as Windpicker-owo Windpicker-owo
The avatar of contributor named as minecraft1024a minecraft1024a

页面历史

Released under the GPL-3.0 License.