From 2ff7908bc76d7742c3881bcac2aee7fa2ee8f5c5 Mon Sep 17 00:00:00 2001 From: qing <1776177662@qq.com> Date: Tue, 4 Aug 2026 23:44:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(db):=20=5Fview=5Fdb=20-n=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=96=E6=9C=80=E5=90=8E=20N=20=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 rowid 倒序取末尾 N 行,外层再正序展示,便于查看最新日志; -w 条件放入内层子查询,语义为"最后 N 条匹配记录"。 --- db/_view_db.sqlite3.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/db/_view_db.sqlite3.py b/db/_view_db.sqlite3.py index 0a3881b..5324be8 100755 --- a/db/_view_db.sqlite3.py +++ b/db/_view_db.sqlite3.py @@ -35,7 +35,7 @@ def print_rows(cols, rows): def main(): parser = argparse.ArgumentParser(description="查看 database.db") parser.add_argument("table", nargs="?", help="要查看的表名 (不指定则列出所有表)") - parser.add_argument("-n", "--limit", type=int, default=50, help="最多显示行数 (默认 50)") + parser.add_argument("-n", "--limit", type=int, default=50, help="显示最后 N 行 (默认 50)") parser.add_argument("-w", "--where", help="WHERE 条件, 如: \"level='ERROR'\"") parser.add_argument("-s", "--sql", help="自由 SQL 查询 (忽略 table/where/limit)") args = parser.parse_args() @@ -65,15 +65,17 @@ def main(): conn.close() return - # 查看指定表 + # 查看指定表:取最后 N 行(按 rowid 倒序取,再正序展示) + # 用子查询包装:内层倒序取末尾 N 行,外层按 rowid 正序还原展示顺序 if args.table not in tables: print(f"表 '{args.table}' 不存在, 可用: {', '.join(tables)}", file=sys.stderr) sys.exit(1) - sql = f"SELECT * FROM [{args.table}]" + inner = f"SELECT * FROM [{args.table}]" if args.where: - sql += f" WHERE {args.where}" - sql += f" LIMIT {args.limit}" + inner += f" WHERE {args.where}" + inner += f" ORDER BY rowid DESC LIMIT {args.limit}" + sql = f"SELECT * FROM ({inner}) ORDER BY rowid ASC" cur.execute(sql) cols = [d[0] for d in cur.description]