Database Operations
提供数据库设计、迁移、SQL优化、索引策略等专家指导。
下载 1.21万
使用 tkms AsyncSqlSessionTemplate 进行数据库操作规范,包括插入、更新、查询等。
openclaw skills install @laimiaohua/gi-database-query-patterns命令、参数、文件名以原文为准
使用 tkms 的 AsyncSqlSessionTemplate 进行数据库操作。适用于 app/dao 层,MySQL 8.0,UTF8 字符集。
from tkms.database.async_template import AsyncSqlSessionTemplate
# 插入
await session.insert(table="t_user", params=entity, primary_key="tid")
# 更新
await session.update(table="t_user", params=entity, primary_key="tid")
# 查询单条
row = await session.query_one("SELECT * FROM t_user WHERE id = :id", {"id": user_id})
# 查询列表
rows = await session.query_list("SELECT * FROM t_user WHERE status = :status", {"status": 1})async def add_user(self, user: UserEntity):
await self.session.insert(table="t_user", params=user, primary_key="tid")params:实体或字典,字段名与表列对应primary_key:主键字段名,用于自增主键async def update_user(self, user: UserEntity):
await self.session.update(table="t_user", params=user, primary_key="tid")async def get_by_id(self, user_id: int) -> UserEntity | None:
row = await session.query_one(
"SELECT * FROM t_user WHERE id = :id",
{"id": user_id}
)
return UserEntity(**row) if row else Noneasync def get_list(self, status: int, page: int, page_size: int):
offset = (page - 1) * page_size
rows = await session.query_list(
"SELECT * FROM t_user WHERE status = :status ORDER BY id DESC LIMIT :limit OFFSET :offset",
{"status": status, "limit": page_size, "offset": offset}
)
return [UserEntity(**r) for r in rows]async def count_by_status(self, status: int) -> int:
row = await session.query_one(
"SELECT COUNT(*) as cnt FROM t_user WHERE status = :status",
{"status": status}
)
return row["cnt"] if row else 0:param 占位,禁止字符串拼接t_)create_time、update_time,类型 DATETIMECREATE TABLE t_user (
tid BIGINT PRIMARY KEY AUTO_INCREMENT,
id VARCHAR(64) NOT NULL UNIQUE,
name VARCHAR(128),
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_status (status),
INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;若框架支持事务,批量操作应包裹在事务内,保证原子性。
已收录 1 个 Skill