96SEO 2026-06-07 11:43 0
嘿,朋友,你是不是也遇到过那种情况?
就是你辛辛苦苦写了一堆代码,结果发现数据库结构好像有点乱,想查点东西dou得翻半天?

害,咱就是说这事儿太常见了。
今天咱就来聊聊怎么查 SQLite 数据库的结构,让你以后再也不用瞎猜表名、字段名,直接kan清楚里面到底有啥。
先说说为啥要查数据库结构你懂的,SQLite 这玩意儿虽然轻量,但里面的数据结构有时候真不是一目了然的。
特别是你接手一个老项目,或者你用的是别人写的数据库,那结构可Neng跟你的想象完全不一样。
所以查结构这事儿,真的hen重要。
用命令行打开数据库你得知道数据库文件在哪,对吧?
比如你用的是 opencode.db,路径大概是这样:
~/Library/Application\ Support/opencode/opencode.db
然后你打开终端,输入:
sqlite3 ~/Library/Application\ Support/opencode/opencode.db
不对不对,应该是:
sqlite3 ~/Library/Application\ Support/opencode/opencode.db
然后你就进到 SQLite 的命令行了。
查kan表结构进去了之后你Ke以用这个命令kan有哪些表:
.tables
你就Nengkan到类似这样的输出:
project session message part
todo account event_sequence
嗯,kan起来是不是有点像文件树?哈哈,其实它就是个数据库的“目录结构”。
然后你就Ke以查某个表的结构了比如:
PRAGMA table_info;
你就Nengkan到 session 表的字段、类型、是否为主键啥的,一清二楚。
用 SQL 查询结构你也Ke以直接用 SQL 查:
SELECT * FROM sqlite_master WHERE type='table';
这个命令会列出所有表的创建语句,包括字段、索引、约束等信息。
是不是比你一个一个查表快多了?
用工具kan结构geng直观说实话,有时候你用命令行kan结构还是有点费劲,特别是表多了之后。
这时候你Ke以用一些图形化工具,比如 DB Browser for SQLite,直接打开数据库文件,点点点,结构就出来了。
不过咱今天说的是命令行,所以咱就继续用命令行来查。
查表字段比如你想查 session 表的字段,Ke以这样:
PRAGMA table_info;
输出大概是这样:
cid name type notnull dflt_value pk
---- ------------ ------- ------- ---------- --
0 id TEXT 1 NULL 1
1 project_id TEXT 1 NULL 0
2 workspace_id TEXT 0 NULL 0
...
你kan,id 是主键,project_id 是外键,workspace_id 是可选的,一目了然。
查索引和约束你还Ke以查索引:
PRAGMA index_list;
或者查外键约束:
PRAGMA foreign_key_list;
这样你就Neng知道哪些字段是外键,指向哪个表,是不是hen爽?
查表之间的关系比如 session 表的 project_id 指向 project 表的 id,parent_id 指向自己,workspace_id 指向 workspace 表。
你Ke以用这个命令查外键关系:
PRAGMA foreign_key_list;
输出大概是这样:
id seq table from to on_update on_delete match
--- ---- --------- ----------- --- --------- ---------- ------
0 0 project project_id id NO ACTION NO ACTION NONE
你kan,project_id 指向 project 表的 id,是不是hen清楚?
查表数据你也Ke以查数据:
SELECT * FROM session LIMIT 1;
或者查某个字段的值:
SELECT id, title, directory FROM session LIMIT 1;
这样你就Nengkan到 session 表的结构和数据了。
查 JSON 字段有些字段是 JSON 格式的,比如 message 表的 data 字段:
SELECT json_extract AS role,
json_extract AS model
FROM message LIMIT 1;
你就Nengkan到 role、model 这些字段的值了。
查所有 Session 列表比如你想查所有 session 的列表:
SELECT s.id,
s.title,
s.directory,
datetime AS created_at,
datetime AS updated_at,
s.summary_files,
s.summary_additions,
s.summary_deletions
FROM session s
ORDER BY s.time_created DESC;
这样你就Nengkan到所有 session 的信息了。
查某个 Session 的完整对话比如你想查某个 session 的完整对话:
-- 替换 'your-session-id' 为实际 session ID
SELECT m.id AS message_id,
datetime AS time,
json_extract AS role,
json_extract AS agent,
json_extract AS finish,
json_extract AS tokens_in,
json_extract AS tokens_out,
p.id AS part_id,
json_extract AS part_type,
json_extract AS text_content
FROM message m
LEFT JOIN part p ON p.message_id = m.id
WHERE m.session_id = 'your-session-id'
AND json_extract = 'text'
ORDER BY m.time_created, p.time_created;
这样你就Nengkan到某个 session 的完整对话了。
查所有工具调用记录比如你想查所有工具调用记录:
SELECT p.session_id,
m.id AS message_id,
datetime AS time,
json_extract AS tool_name,
json_extract AS input_json,
json_extract AS status,
json_extract AS start_ms,
json_extract AS end_ms,
-
json_extract) AS duration_ms,
CASE WHEN json_extract IS NOT NULL
THEN 'pruned' ELSE 'intact' END AS prune_status
FROM part p
JOIN message m ON m.id = p.message_id
WHERE json_extract = 'tool'
ORDER BY p.time_created DESC
LIMIT 100;
这样你就Nengkan到所有工具调用记录了。
按工具名称统计调用次数和平均耗时比如你想按工具名称统计调用次数和平均耗时:
SELECT json_extract AS tool_name,
COUNT AS call_count,
COUNT = 'error' THEN 1 END) AS error_count,
AVG -
json_extract) AS avg_duration_ms,
MAX -
json_extract) AS max_duration_ms
FROM part p
WHERE json_extract = 'tool'
AND json_extract = 'completed'
GROUP BY tool_name
ORDER BY call_count DESC;
这样你就Nengkan到每个工具的调用次数和平均耗时了。
查询 Token 消耗统计比如你想查询 Token 消耗统计:
SELECT s.title,
s.id AS session_id,
datetime AS created_at,
SUM) AS total_input_tokens,
SUM) AS total_output_tokens,
SUM +
json_extract) AS total_tokens,
COUNT AS message_count
FROM session s
JOIN message m ON m.session_id = s.id
WHERE json_extract = 'assistant'
AND json_extract IS NOT NULL
GROUP BY s.id
ORDER BY total_tokens DESC;
这样你就Nengkan到每个 session 的 Token 消耗统计了。
查询压缩记录比如你想查询压缩记录:
SELECT p.session_id,
m.id AS compact_req_msg,
datetime AS time,
json_extract AS auto_triggered,
json_extract AS was_overflow,
json_extract AS tail_start_id
FROM part p
JOIN message m ON m.id = p.message_id
WHERE json_extract = 'compaction'
ORDER BY m.time_created DESC;
这样你就Nengkan到压缩记录了。
查询压缩摘要内容比如你想查询压缩摘要内容:
SELECT m.session_id,
m.id AS summary_msg_id,
datetime AS time,
p.id AS part_id,
json_extract AS summary_text
FROM message m
JOIN part p ON p.message_id = m.id
WHERE json_extract = 1
AND json_extract = 'text'
ORDER BY m.time_created DESC;
这样你就Nengkan到压缩摘要内容了。
查询被 Prune 裁剪的工具输出比如你想查询被 Prune 裁剪的工具输出:
SELECT p.session_id,
json_extract AS tool_name,
datetime / 1000,
'unixepoch', 'localtime') AS pruned_at
FROM part p
WHERE json_extract = 'tool'
AND json_extract IS NOT NULL
ORDER BY json_extract DESC;
这样你就Nengkan到被裁剪的工具输出了。
查询 Todo 列表比如你想查询 Todo 列表:
SELECT t.session_id,
s.title AS session_title,
t.position,
t.content,
t.status,
t.priority,
datetime AS created_at
FROM todo t
JOIN session s ON s.id = t.session_id
ORDER BY t.session_id, t.position;
这样你就Nengkan到 Todo 列表了。
导出数据到 Excel比如你想导出数据到 Excel:
pip install pandas openpyxl
然后运行:
python docs/export_session.py
这样你就Neng导出数据到 Excel 了。
导出所有 Session 汇总比如你想导出所有 Session 汇总:
import sqlite3
import pandas as pd
import os
from urllib.request import pathname2url
_candidates =
DB_PATH = next), None)
OUTPUT_PATH = os.path.expanduser
conn = sqlite3.connect}?mode=ro", uri=True)
def q:
return pd.read_sql_query
sessions = q("""
SELECT s.id, s.title, s.directory,
datetime AS created_at,
datetime AS updated_at,
s.summary_files, s.summary_additions, s.summary_deletions,
p.name AS project_name
FROM session s
LEFT JOIN project p ON p.id = s.project_id
ORDER BY s.time_created DESC""")
tool_stats = q("""
SELECT p.session_id,
json_extract AS tool_name,
COUNT AS call_count,
ROUND(AVG(
json_extract -
json_extract
), 2) AS avg_duration_ms
FROM part p
WHERE json_extract = 'tool'
GROUP BY p.session_id, tool_name
ORDER BY p.session_id, call_count DESC""")
token_summary = q("""
SELECT m.session_id,
SUM) AS total_input,
SUM) AS total_output,
COUNT AS assistant_msgs
FROM message m
WHERE json_extract = 'assistant'
AND json_extract IS NOT NULL
GROUP BY m.session_id""")
conn.close
with pd.ExcelWriter as writer:
sessions.to_excel
tool_stats.to_excel
token_summary.to_excel
print} 个 Session")
这样你就Neng导出所有 Session 汇总了。
sqlite3 CLI 导出 CSV比如你想用 sqlite3 CLI 导出 CSV:
sqlite3 ~/Library/Application\ Support/opencode/opencode.db
.mode csv
.headers on
.output /tmp/sessions.csv
SELECT id, title, directory,
datetime AS created_at
FROM session ORDER BY time_created DESC;
.output /tmp/tool_calls.csv
SELECT p.session_id,
json_extract AS tool,
json to status,
datetime AS time
FROM part p
WHERE json_extract = 'tool';
.quit
之后用 Excel 直接打开 CSV 文件。
打开数据库文件路径:~/Library/Application Support/opencode/opencode.db
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback