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.db、mysql+pymysql://...、postgresql://...) |
数据库.创建表 / 删除表 / 测试连接 / 执行SQL / 会话 / 关闭 | 数据库操作 |
会话.添加 / 添加全部 / 删除 / 提交 / 回滚 / 刷新 / 关闭 | 事务操作(支持 with 自动提交/回滚) |
会话.查询(模型) / 获取(模型, 主键) | 查询入口 |
查询结果.过滤 / 过滤自 / 排序 / 限制 / 偏移 / 分页 / 全部 / 第一条 / 一条 / 数量 / 求和 / 平均值 / 最大值 / 最小值 | 链式查询 |
内存数据库() / SQLite(路径) | 便捷构造 |
注意:模型类需以
类 用户(基类): 声明并设置 __tablename__;过滤条件用 模型.列 与比较运算符构造(如 用户.年龄 > 18),可用 与 / 或 / 非 组合;MySQL / PostgreSQL 需额外安装驱动(如 pymysql / psycopg2)。27.2CQDateTime 时间日期
CQDateTime 基于 arrow 与 python-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 基于 typer 与 click,用装饰器快速构建命令行应用,支持彩色输出、交互提示与进度条。
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 命令名 参数(命令名用 命令(名称=...) 指定的英文名);交互提示函数(提示 / 确认 / 选择)会阻塞等待用户输入,自动化测试时慎用;选项 的布尔开关用 标记=真,终端传 --选项名 即为 真。