CQL 教程/中文适配子包/基础与中间件

基础与中间件

掌握 CQORM 数据库 ORM、CQDateTime 时间日期、CQRedis 缓存与 CQCLI 命令行工具四个子包的用法。

27.1CQORM 数据库 ORM

CQORM 基于 SQLAlchemy,用模型类与链式查询操作数据库,支持 SQLite / MySQL / PostgreSQL。

cql
从 cqorm 导入 基类, 列, 整数, 文本, 数据库

类 用户(基类):
    __tablename__ = "用户表"
    编号 = 列(整数, 主键=True)
    姓名 = 列(文本(50), 空=False, 唯一=True)
    年龄 = 列(整数, 默认=18)

数据库对象 = 数据库("sqlite:///app.db")
数据库对象.创建表()

with 数据库对象.会话() as 会话:
    会话.添加(用户(姓名="小明"))
    会话.提交()

    # 查询(链式)
    全部 = 会话.查询(用户).全部()
    筛选 = 会话.查询(用户).过滤(用户.年龄 > 18).排序(用户.年龄.desc()).全部()
    分页 = 会话.查询(用户).分页(页码=1, 每页数量=10).全部()

    # 按主键取
    某人 = 会话.获取(用户, 1)

    # 更新 / 删除
    某人.年龄 = 30
    会话.提交()
    会话.删除(某人)
    会话.提交()

API 一览

中文 API说明
基类模型基类(类 用户(基类):
列(类型, 主键, 空, 唯一, 默认, 索引, 注释)字段声明
外键列(目标) / 关系(目标, 反向引用, 级联, 数量)外键与关系
类型别名整数、文本(长度)、浮点数、布尔、日期、日期时间、时间、大文本、二进制
数据库(地址, 回显)连接(sqlite:///x.dbmysql+pymysql://...postgresql://...
数据库.创建表 / 删除表 / 测试连接 / 执行SQL / 会话 / 关闭数据库操作
会话.添加 / 添加全部 / 删除 / 提交 / 回滚 / 刷新 / 关闭事务操作(支持 with 自动提交/回滚)
会话.查询(模型) / 获取(模型, 主键)查询入口
查询结果.过滤 / 过滤自 / 排序 / 限制 / 偏移 / 分页 / 全部 / 第一条 / 一条 / 数量 / 求和 / 平均值 / 最大值 / 最小值链式查询
内存数据库() / SQLite(路径)便捷构造
注意:模型类需以 类 用户(基类): 声明并设置 __tablename__;过滤条件用 模型.列 与比较运算符构造(如 用户.年龄 > 18),可用 / / 组合;MySQL / PostgreSQL 需额外安装驱动(如 pymysql / psycopg2)。

27.2CQDateTime 时间日期

CQDateTime 基于 arrowpython-dateutil,提供面向人的时间对象:格式化、人类化描述、时区转换与日期计算。

cql
从 cqdatetime 导入 现在, 解析, 时间, 计算年龄

当前 = 现在()
print(当前.格式化("YYYY年MM月DD日 HH:mm:ss"))   # 2026年08月01日 10:30:00
print(当前.人类化())                            # 刚刚 / 3 小时前

明天 = 当前.偏移(天=1)
print(明天.星期名称())                          # 星期日

生日 = 解析("2000-01-01")
print(计算年龄(生日))                           # 26

# 属性与运算
print(当前.年(), 当前.月(), 当前.日())          # 2026 8 1
print(当前.当天开始(), 当前.当天结束())
print(当前.转时间戳(), 当前.转ISO())
print(当前.转换为时区("Asia/Shanghai"))

API 一览

分类中文 API
构造现在(时区) / 现在UTC() / 现在时间戳()今天() / 明天() / 昨天()
解析时间(年, 月, 日, 时, 分, 秒, 微秒, 时区)解析(文本, 格式, 时区)从时间戳(秒)当前时区()
计算跨度(起, 止, 单位)计算年龄(生日)相隔天数(起, 止)
输出时间对象.格式化(格式) / 人类化(语言) / 转ISO()
运算偏移(年, 月, 天, 时, 分, 秒, 周) / 替换(...)
属性年() / 月() / 日() / 时() / 分() / 秒() / 微秒()
日历星期() / 星期名称() / 一年中第几天() / 是否闰年()
转换转时间戳 / 转日期 / 转日期时间 / 转时间
边界当天开始 / 当天结束 / 当月开始 / 当月结束
比较是否早于 / 是否晚于 / 相差秒数 / 相差天数
提示:格式化符号遵循 arrow 风格:YYYY 年、MM 月、DD 日、HH 时、mm 分、ss 秒;时间对象可与 Python datetime / date 互转;人类化() 默认中文输出,传 语言="en" 可切换英文。

27.3CQRedis 缓存

CQRedis 基于 redis-py,覆盖字符串、哈希、列表、集合、有序集合、发布订阅与管道,是高性能缓存与消息场景的常用组件。

cql
从 cqredis 导入 客户端

缓存 = 客户端()                    # 默认 127.0.0.1:6379

# 字符串
缓存.设置("名称", "小明", 过期秒=3600)
print(缓存.获取("名称"))
缓存.递增("计数器")

# 哈希
缓存.哈希批量设置("用户:1", {"姓名": "小红", "年龄": 20})
print(缓存.哈希全部("用户:1"))     # {'姓名': '小红', '年龄': '20'}

# 列表
缓存.列表右推("队列", 1, 2, 3)
print(缓存.列表范围("队列"))       # ['1', '2', '3']

# 发布订阅
缓存.发布("通知", "有新消息")
订阅者 = 缓存.订阅("通知")

# 管道
管道 = 缓存.管道()
管道.设置("a", 1).设置("b", 2).递增("a")
结果 = 管道.执行()

缓存.关闭()

API 一览

分类中文 API
连接客户端(主机, 端口, 密码, 数据库, 超时, 解码响应, 地址)地址 可传连接串)
字符串设置(键, 值, 过期秒) / 获取(键, 默认) / 设置如果不存在 / 批量设置 / 批量获取
计数递增(键, 数量) / 递减 / 追加
键操作删除(*键) / 存在 / 键们(模式) / 类型 / 设置过期 / 过期时间
哈希哈希设置 / 哈希批量设置 / 哈希获取 / 哈希全部 / 哈希键们 / 哈希值们 / 哈希删除 / 哈希存在 / 哈希长度 / 哈希递增
列表列表左推 / 列表右推 / 列表左弹 / 列表右弹 / 列表范围 / 列表长度 / 列表设置 / 列表删除
集合集合添加 / 集合全部 / 集合删除 / 集合大小 / 集合存在 / 集合交集 / 集合并集 / 集合差集
有序集合有序添加 / 有序批量添加 / 有序范围 / 有序分数 / 有序大小 / 有序删除 / 有序排名
发布订阅发布(频道, 消息) / 订阅(*频道) / 按模式订阅(*模式)
管道管道(),链式调用 设置 / 获取 / 递增 / 哈希设置 ...执行()
管理测试连接() / 信息() / 清空() / 清空全部() / 关闭()
注意:未启动 Redis 服务器时 测试连接() 返回 ,其他命令会抛连接异常;默认 解码响应=真,值以文本返回,需要字节时传 解码响应=假订阅 返回 订阅者 对象,监听() 为阻塞生成器。

27.4CQCLI 命令行工具

CQCLI 基于 typerclick,用装饰器快速构建命令行应用,支持彩色输出、交互提示与进度条。

cql
从 cqcli 导入 命令, 选项, 参数, 运行, 打印, 提示, 确认, 进度条, 表

@命令(名称="greet")                # 名称 为终端调用名(中文函数名无法直接输入)
def 打招呼(名字: str = 参数("世界", 帮助="你的名字"),
           大声: bool = 选项(标记=True, 帮助="大声输出")):
    文本 = "你好,{}!".format(名字)
    if 大声:
        文本 = 文本.upper()
    打印(文本, 前景="green")

@命令(名称="统计")
def 统计():
    姓名 = 提示("请输入姓名", 默认="小明")
    if 确认("继续吗?"):
        表(["姓名", "状态"], [[姓名, "完成"]])
    with 进度条(范围(100), 标签="处理中") as 条:
        for 项 in 条:
            跳过

if __name__ == "__main__":
    运行()

终端调用:python app.py greet 小明 --大声python app.py 统计

API 一览

中文 API说明
应用 / 新应用(名称, 帮助)全局应用 / 独立应用
@命令(名称, 帮助)注册命令(多命令时终端需带命令名)
参数(默认, 帮助) / 选项(默认, 帮助, 标记, 密码, 提示, 多个)位置参数 / 选项
运行(*参数) / 运行应用(应用对象)执行(缺省从 sys.argv 读取)
打印(文本, 前景, 背景, 加粗) / 成功 / 警告 / 错误 / 信息 / 标题彩色输出
提示(文本, 默认, 密码, 确认, 类型) / 密码提示 / 确认(文本) / 选择(文本, 选项)交互输入
暂停() / 清除() / 编辑(文本)终端控制
进度条(迭代器, 标签)进度条(上下文管理器)
表(头们, 行们)对齐表格输出
颜色常量红、绿、蓝、黄、青、洋红、白、黑
注意:单命令应用终端直接 python app.py 参数,多命令应用终端需 python app.py 命令名 参数(命令名用 命令(名称=...) 指定的英文名);交互提示函数(提示 / 确认 / 选择)会阻塞等待用户输入,自动化测试时慎用;选项 的布尔开关用 标记=真,终端传 --选项名 即为