首页龙虾技能列表 › GI Database Query Patterns — 使用 tkms AsyncSqlSessionTemplate 编写数据库查询

GI Database Query Patterns — 使用 tkms AsyncSqlSessionTemplate 编写数据库查询

v1.0.0

提供使用 tkms AsyncSqlSessionTemplate 编写 DAO 层 SQL 的指南,涵盖插入、更新、查询等数据库操作,适用于实现 DAO 层、写 SQL 或响应用户数据库操作请求。

0· 370·0 当前·0 累计
by @laimiaohua·MIT-0
下载技能包
License
MIT-0
最后更新
2026/3/17
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
本技能为使用 tkms AsyncSqlSessionTemplate 编写 DAO 层 SQL 的指南,内容一致,无需额外权限、安装或凭证请求。
评估建议
本技能为编码/风格指南,逻辑清晰。使用前请确保:(1) 运行环境有 tkms 库和配置好的 AsyncSqlSessionTemplate;(2) 不给非受信任代理生产数据库凭证;(3) 审查生成的 SQL;(4) 有备份/事务机制;(5) 若需连接数据库,优先使用短期凭证或中间服务。...
详细分析 ▾
用途与能力
名称/描述与内容匹配:SKILL.md 为 AsyncSqlSessionTemplate 提供了模式和示例(插入/更新/查询/计数)以及 MySQL 表约定,不请求无关访问或工具。
指令范围
指令范围为写 DAO 代码,包括使用会话对象和参数化 SQL 的具体示例。注意:文档假设运行环境中已有 tkms 库和 AsyncSqlSessionTemplate 会话对象(无安装或连接指令),但不指示读取无关文件、环境变量或向外部端点传输数据。
安装机制
无安装规格或下载 — 仅指令技能,因此安装时不写入磁盘或获取内容。
凭证需求
不请求环境变量、凭证或配置路径。内容讨论数据库操作但不要求数据库凭证或其他秘密。
持久化与权限
always 为 false,本技能可由用户调用,允许正常的自动调用(平台默认)。不请求持久系统更改或修改其他技能的配置。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/3/17
● 无害

安装命令 点击复制

官方npx clawhub@latest install gi-database-query-patterns
镜像加速npx clawhub@latest install gi-database-query-patterns --registry https://cn.clawhub-mirror.com

技能文档

使用 tkms 的 AsyncSqlSessionTemplate 进行数据库操作。适用于 app/dao 层,MySQL 8.0,UTF8 字符集。

何时使用

  • 用户请求「写 dao」「写数据库操作」「查表」
  • 实现 app/dao 下的数据访问逻辑
  • 设计表结构、索引、SQL 语句

核心 API

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})

操作规范

1. 插入

async def add_user(self, user: UserEntity):
    await self.session.insert(table="t_user", params=user, primary_key="tid")
  • params:实体或字典,字段名与表列对应
  • primary_key:主键字段名,用于自增主键

2. 更新

async def update_user(self, user: UserEntity):
    await self.session.update(table="t_user", params=user, primary_key="tid")
  • 按主键更新,需包含主键值

3. 查询单条

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 None

4. 查询列表(含分页)

async 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]

5. 统计

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

SQL 规范

  • 参数化:一律用 :param 占位,禁止字符串拼接
  • 表名:项目约定表前缀(如 t_
  • 索引:WHERE、ORDER BY 常用列建索引
  • 避免 N+1:批量查询用 IN 或 JOIN,避免循环单条查

建表规范

  • 主键必建
  • 按查询需求建索引(单列、复合)
  • 字符集 UTF8
  • 时间字段:create_timeupdate_time,类型 DATETIME
CREATE 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;

事务

若框架支持事务,批量操作应包裹在事务内,保证原子性。

数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制

免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制

了解定制服务