尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
微信聊天记录导出工具:SQLite解析与多格式导出实战
简介这是一款面向普通微信用户与轻量级开发者的数据管理工具解决聊天记录难以长期保存、跨设备查看及多格式复用的痛点。资源为精简型源码包共3个文件1个.inscode配置文件定义导出规则与路径、1个index.html本地可视化预览入口支持离线加载导出内容、1个.gitignore适配Git协作开发整体仅4KB即下即用无需编译或依赖环境。已有686人学习下载适合希望快速备份重要对话、生成年度回顾报告或二次定制导出逻辑的非专业开发者及数字记忆管理者。用户可直接运行exe启动工具将手机端安卓/iOS聊天记录迁移至PC后一键导出为HTML网页存档、PDF打印归档、Word编辑分享、TXT纯文本提取及Excel结构化分析并自动生成含词频统计与时间分布图的可视化年报真正实现从数据采集到价值呈现的闭环。1. 微信聊天记录导出工具[代码]不是备份是可控的数据主权实践你有没有试过——手机换新后翻不到三年前那条关键工作确认客户投诉时微信里找不到原始沟通截图审计要求提供某次项目协调的完整文字留痕却只能靠截图拼凑这不是功能缺失而是微信原生机制对「用户自主导出」的系统性限制iOS 仅支持整机备份到 iCloud不可筛选、不可读、安卓需开启 USB 调试并依赖厂商定制逻辑华为/小米/OPPO 行为不一、所有平台均无标准 API 支持按联系人/时间/关键词批量提取纯文本或结构化数据。所谓「微信聊天记录导出工具[代码]」本质是一套绕过封闭生态、在用户设备本地完成数据捕获与格式化转换的轻量级工程方案。它不破解加密、不越狱/root、不调用未公开接口而是基于微信 SQLite 数据库的公开存储结构MM.sqlite及其 WAL 日志结合 Android 的adb backup或 iOS 的已授权备份文件如 iTunes 备份解包后的Manifest.dbChatStorage.sqlite用 Python 实现可审计、可复现、可二次开发的数据提取流水线。适合需要合规存档、跨平台分析、或做私有知识库建设的个体开发者、中小团队技术负责人以及对数据归属有明确诉求的数字工作者。2. 从设备获取原始数据Android 与 iOS 的双路径实操微信聊天数据并非“云同步即可见”其本地存储遵循强终端绑定策略。导出的前提是先拿到设备上真实存在的、未被加密覆盖的原始数据库文件。这里没有银弹只有两条经实战验证的路径Android 侧走adb backup 解包iOS 侧走 iTunes/Finder 备份解密。二者均不依赖越狱或 root但操作细节决定成败。2.1 Android 设备用 adb backup 获取可解析的加密备份包微信在 Android 上默认将ChatStorage.db含聊天主表Chat_XXXXXX、消息体表Message、联系人表Contact写入/data/data/com.tencent.mm/MicroMsg/下的多层哈希目录。普通应用无权直接读取该路径但adb backup命令可触发微信主动导出一份加密备份需用户在手机端点击确认。这是官方允许、无需 root 的合法通道。# 在已开启 USB 调试的 Android 手机上执行 adb backup -f mm_backup.ab com.tencent.mm提示mm_backup.ab是 Android 备份格式.ab本质是带头信息的 tar 压缩包但头部含 AES 加密标识。不能直接解压。必须先剥离头信息再解密解包。剥离头信息需识别.ab文件头ANDROID BACKUP\n1\n1\nnone\n共 24 字节用 Python 快速处理# strip_ab_header.py with open(mm_backup.ab, rb) as f: data f.read() # 跳过 24 字节头剩余为标准 tar 流 if data.startswith(bANDROID BACKUP): tar_data data[24:] with open(mm_backup.tar, wb) as out: out.write(tar_data) print(✅ 头信息剥离完成生成 mm_backup.tar) else: print(❌ 文件非标准 .ab 格式请检查 adb backup 是否成功)执行后得到mm_backup.tar解包即可看到微信备份目录结构apps/com.tencent.mm/db/ChatStorage.db apps/com.tencent.mm/db/EnMicroMsg.db # 账户与密钥信息 apps/com.tencent.mm/shared_prefs/ # 配置项关键点在于ChatStorage.db是 SQLite3 格式但默认启用 WAL 模式Write-Ahead Logging直接打开会报错database is locked。必须先合并 WAL 日志# 使用 sqlite3 命令行工具需安装 sqlite3 ChatStorage.db PRAGMA wal_checkpoint(FULL); # 或 Python 中用 sqlite3 模块调用相同 PRAGMA此时ChatStorage.db才是可安全读取的干净数据库。2.2 iOS 设备从 iTunes/Finder 备份中定位解密后的 ChatStorage.sqliteiOS 端无法使用 adb但 iTunesmacOS Catalina 及以后为 Finder备份会将微信数据以加密形式存入备份目录。关键在于微信在 iOS 备份中不使用全盘加密而是对敏感数据库单独 AES-256 加密密钥藏于Manifest.db中。我们不需要暴力破解而是利用 Apple 官方备份格式规范提取密钥。步骤分三步找到备份目录macOS 路径为~/Library/Application Support/MobileSync/Backup/Windows 为%APPDATA%\Apple Computer\MobileSync\Backup\。每个子目录名是设备 UDID 的 SHA1 哈希。从Manifest.db提取微信密钥该数据库含Files表记录每个文件的domain如AppDomain-com.tencent.xin、relativePath如Documents/ChatStorage.sqlite、fileID加密密钥的 SHA1。用fileID解密ChatStorage.sqliteApple 备份使用backup keybag机制密钥由fileID 备份密码若设置推导。绝大多数用户未设备份密码此时密钥为fileID的 32 字节二进制值。Python 解密脚本核心逻辑使用pycryptodomefrom Crypto.Cipher import AES import hashlib def decrypt_sqlite(encrypted_path, file_id_hex, output_path): # file_id_hex 是 Manifest.db 中查到的 40 位 hex 字符串SHA1 key bytes.fromhex(file_id_hex)[:32] # 取前32字节作 AES-256 密钥 iv b\x00 * 16 # iOS 备份固定 IV cipher AES.new(key, AES.MODE_CBC, iv) with open(encrypted_path, rb) as f_in: encrypted_data f_in.read() # 移除末尾 PKCS#7 填充 padding_len encrypted_data[-1] decrypted_data cipher.decrypt(encrypted_data)[:-padding_len] with open(output_path, wb) as f_out: f_out.write(decrypted_data) print(f✅ 解密完成{output_path}) # 示例调用需先从 Manifest.db 查询到 file_id decrypt_sqlite( encrypted_path8a9b.../8a9b.../Documents/ChatStorage.sqlite, file_id_hexa1b2c3d4e5f6..., output_pathChatStorage_decrypted.sqlite )注意Manifest.db本身是未加密 SQLite可用任何 SQLite 工具打开查询语句为SELECT fileID FROM Files WHERE domain AppDomain-com.tencent.xin AND relativePath Documents/ChatStorage.sqlite;至此无论 Android 还是 iOS我们都拿到了可直接sqlite3.connect()的ChatStorage.db或.sqlite文件——这是后续所有导出逻辑的唯一数据源。3. 解析 ChatStorage 数据库消息表、联系人表与时间戳还原微信ChatStorage.db并非单表设计而是通过Chat、Message、Contact三张核心表关联构成。直接查Message表会看到大量msgSvrId、talker、type等字段但含义模糊。必须结合微信逆向文档社区长期维护的 WeChatDB-Schema 和实际数据采样才能准确映射业务语义。3.1 三张核心表的关系与关键字段释义表名主要用途关键字段含义说明Contact存储所有联系人好友、群、公众号username,nickname,alias,conRemark,typeusername是唯一 ID如wxid_xxx、gh_xxx、chatroomtype3为群聊conRemark是用户设置的备注名优先级高于nicknameChat存储会话元数据用于 UI 排序username,lastMsgTime,unreadCountusername关联Contact.usernamelastMsgTime是毫秒时间戳需转为datetimeMessage存储每条消息正文及元信息talker,content,type,createTime,isSend,imgPath,transContenttalkerContact.usernamecontent是纯文本文字消息或 XML图片/链接/小程序type1为文本type3为图片type49为富媒体需解析 XMLcreateTime是毫秒时间戳isSend0为接收1为发送提示Message.content中的 XML 结构是微信富媒体消息的载体。例如图片消息含img urlxxx /链接消息含url![CDATA[xxx]]/url小程序消息含appmsg appidxxxtitle![CDATA[xxx]]/title/appmsg。导出工具必须能解析这些 XML否则会丢失关键信息。3.2 构建可读消息视图SQL JOIN 与时间戳标准化直接遍历Message表效率低且信息不全。最佳实践是创建一个物化视图View将消息、发送者、接收者、群名称等一次性关联-- 创建视图vw_messages_readable CREATE VIEW vw_messages_readable AS SELECT m.createTime / 1000 AS timestamp_s, -- 转为秒级 Unix 时间戳 datetime(m.createTime / 1000, unixepoch, localtime) AS local_time, c1.nickname AS sender_nickname, c1.conRemark AS sender_remark, c1.username AS sender_id, c2.nickname AS receiver_nickname, c2.conRemark AS receiver_remark, c2.username AS receiver_id, m.content, m.type AS msg_type, m.isSend, m.imgPath, m.transContent FROM Message m LEFT JOIN Contact c1 ON m.talker c1.username -- 发送者对于群聊talker 是群ID LEFT JOIN Contact c2 ON CASE WHEN m.talker LIKE chatroom THEN m.talker ELSE m.talker END c2.username; -- 接收者简化处理实际群聊需额外 join 群成员表此视图将createTime毫秒转为本地可读时间并关联发送者昵称/备注。但注意群聊消息的talker是群 ID如chatroom_xxx而content中的displayName字段才记录实际发言者昵称。因此对群聊需额外解析 XMLimport xml.etree.ElementTree as ET def parse_group_sender(content: str) - str: 从群聊消息 content XML 中提取实际发言者昵称 try: root ET.fromstring(content) # 查找 appmsgdes 或 msgfromusername 等常见字段 des_elem root.find(.//des) if des_elem is not None and des_elem.text: return des_elem.text.strip() # 或 fallback 到 XML 文本中的昵称模式如 【张三】你好 import re match re.search(r【([^】])】, content) if match: return match.group(1) except: pass return 未知用户3.3 消息类型路由文本、图片、链接、语音的差异化处理Message.type决定内容解析策略必须分发处理type含义content内容特征导出建议1文本消息纯字符串如你好直接导出3图片消息XML 含img urlxxx /imgPath指向本地缓存路径导出 URL 本地路径若需存档需复制imgPath文件49富媒体链接/小程序/文件XML 结构复杂含appmsgtitle.../titledes.../desurl.../url/appmsg提取title、des、url三字段组合为 Markdown 链接[title](url)34语音消息content为空imgPath指向.amr文件记录文件路径导出时可附加 AMR 转 MP3 脚本10000系统消息如“你已添加了…”content含中文提示保留但可加is_system1标记Python 中实现类型路由def extract_message_content(msg_row): msg_type msg_row[msg_type] content msg_row[content] if msg_type 1: return {type: text, text: content} elif msg_type 3: # 解析图片 URL 和本地路径 url extract_xml_tag(content, img, url) or local_path msg_row.get(imgPath, ) return {type: image, url: url, local_path: local_path} elif msg_type 49: # 解析富媒体 title extract_xml_tag(content, title) or des extract_xml_tag(content, des) or url extract_xml_tag(content, url) or return { type: rich, title: title, description: des, url: url, markdown: f[{title}]({url}) if url else title } else: return {type: other, raw_content: content, msg_type: msg_type} def extract_xml_tag(xml_str: str, tag_name: str, attr_name: str None) - str: 通用 XML 标签提取器 try: root ET.fromstring(xml_str) elem root.find(f.//{tag_name}) if elem is not None: return elem.text.strip() if not attr_name else elem.get(attr_name, ) except: pass return 此函数返回结构化字典为后续导出为 JSON/CSV/Markdown 奠定基础。4. 导出为多格式JSON、CSV、Markdown 与可搜索 HTML拿到结构化消息数据后导出目标决定工具价值。纯数据库导出无意义必须转化为人可读、程序可解析、浏览器可搜索的格式。我们提供四种主流输出每种解决不同场景痛点。4.1 JSON 格式为后续分析与知识库注入提供标准输入JSON 是最灵活的中间格式保留全部字段与嵌套关系适合导入 Elasticsearch 做全文检索或喂给 LLM 做摘要/问答。关键设计点时间字段统一为 ISO8601 字符串2023-10-05T14:23:1808:00消息内容按extract_message_content()分类避免 XML 污染添加conversation_id字段talkersender_id组合便于按会话聚合import json from datetime import datetime def export_to_json(messages: list, output_path: str): json_data [] for msg in messages: # 标准化时间 dt datetime.fromtimestamp(msg[timestamp_s]) iso_time dt.isoformat(timespecseconds) # 构建标准消息对象 std_msg { id: msg[msgSvrId], # 微信内部 ID conversation_id: f{msg[talker]}_{msg[sender_id]}, timestamp: iso_time, sender: { id: msg[sender_id], nickname: msg[sender_nickname] or msg[sender_remark] or 未知, remark: msg[sender_remark] }, content: extract_message_content(msg), is_send: bool(msg[isSend]), msg_type: msg[msg_type] } json_data.append(std_msg) with open(output_path, w, encodingutf-8) as f: json.dump(json_data, f, ensure_asciiFalse, indent2) print(f✅ JSON 导出完成{output_path}共 {len(json_data)} 条消息) # 调用示例 # export_to_json(all_messages, wechat_export.json)参数说明ensure_asciiFalse保证中文不转义indent2提升可读性all_messages是从vw_messages_readable查询出的字典列表。4.2 CSV 格式兼容 Excel满足审计与简单统计需求CSV 是审计人员最爱的格式——可直接拖入 Excel用筛选、透视表快速统计“某联系人发送消息数”、“每日消息量趋势”。但 CSV 不支持嵌套必须扁平化字段名说明示例timestamp本地时间字符串2023-10-05 14:23:18sender_id发送者 usernamewxid_abc123sender_nickname发送者昵称张三sender_remark发送者备注项目甲方talker会话 ID群/好友chatroom_xyzcontent_type消息类型text,image,richcontent_text纯文本内容图片/链接取标题会议纪要已上传content_url链接地址仅 rich/image 类型https://xxx.com/report.pdfis_send是否本人发送True/Falseimport csv from datetime import datetime def export_to_csv(messages: list, output_path: str): with open(output_path, w, newline, encodingutf-8-sig) as f: # utf-8-sig 防 Excel 乱码 writer csv.DictWriter(f, fieldnames[ timestamp, sender_id, sender_nickname, sender_remark, talker, content_type, content_text, content_url, is_send ]) writer.writeheader() for msg in messages: dt datetime.fromtimestamp(msg[timestamp_s]) content_obj extract_message_content(msg) row { timestamp: dt.strftime(%Y-%m-%d %H:%M:%S), sender_id: msg[sender_id], sender_nickname: msg[sender_nickname] or , sender_remark: msg[sender_remark] or , talker: msg[talker], content_type: content_obj[type], content_text: ( content_obj.get(text, ) or content_obj.get(title, ) or content_obj.get(description, ) or ), content_url: content_obj.get(url, ), is_send: True if msg[isSend] else False } writer.writerow(row) print(f✅ CSV 导出完成{output_path}) # 调用示例 # export_to_csv(all_messages, wechat_export.csv)注意encodingutf-8-sig是 Windows Excel 识别 UTF-8 的关键否则中文显示为乱码。4.3 Markdown 格式生成可读性最强的归档文档Markdown 是工程师与知识工作者的归档首选——支持标题、代码块、图片内嵌、超链接且 Git 友好。我们按会话分组每组生成一个.md文件wechat_export/ ├── 张三项目甲方.md ├── 产品讨论群.md └── 公众号-技术前沿.md每文件内按时间倒序排列消息块用引用块标记发送方图片自动转为![](path)def export_to_markdown(messages: list, output_dir: str): import os from collections import defaultdict # 按 talker 分组 chats defaultdict(list) for msg in messages: # 生成会话标题优先用备注再用昵称最后用 username title (msg[sender_remark] or msg[sender_nickname] or msg[talker].split()[0][:10]) if msg[talker].endswith(chatroom): title 群聊- title chats[title].append(msg) os.makedirs(output_dir, exist_okTrue) for title, chat_msgs in chats.items(): # 清理文件名非法字符 safe_title .join(c for c in title if c.isalnum() or c in -_ ) md_path os.path.join(output_dir, f{safe_title}.md) with open(md_path, w, encodingutf-8) as f: f.write(f# {title}\n\n) # 按时间倒序 chat_msgs.sort(keylambda x: x[timestamp_s], reverseTrue) for msg in chat_msgs: dt datetime.fromtimestamp(msg[timestamp_s]) time_str dt.strftime(%m-%d %H:%M) content_obj extract_message_content(msg) if content_obj[type] text: f.write(f [{time_str}] {content_obj[text]}\n\n) elif content_obj[type] image: url content_obj[url] or content_obj[local_path] f.write(f [{time_str}] ![]({url})\n\n) elif content_obj[type] rich: md_link content_obj.get(markdown, ) f.write(f [{time_str}] {md_link}\n\n) else: f.write(f [{time_str}] [类型 {content_obj[type]}] {content_obj.get(raw_content, )[:50]}...\n\n) print(f✅ Markdown 导出完成{md_path}) # 调用示例 # export_to_markdown(all_messages, wechat_export_md/)4.4 可搜索 HTML内置全文检索的离线网页HTML 格式解决“想查某句话但不想开 Excel”的痛点。我们用lunr.js轻量级 JS 搜索库构建单页应用无需服务器!-- search.html -- !DOCTYPE html html head meta charsetUTF-8 title微信聊天记录搜索/title script srchttps://cdn.jsdelivr.net/npm/lunr2.3.9/lunr.min.js/script /head body input typetext idsearch-input placeholder搜索消息... stylewidth:100%; padding:10px; div idresults/div script // 嵌入 JSON 数据此处应由 Python 生成内联 script const messages [ {id:1,timestamp:2023-10-05T14:23:18,sender:张三,content:会议纪要已上传}, // ... 更多消息 ]; // 构建 lunr 索引 const idx lunr(function () { this.ref(id); this.field(content); this.field(sender); messages.forEach(function (msg) { this.add({ id: msg.id, content: msg.content, sender: msg.sender }) }, this) }); // 搜索逻辑 document.getElementById(search-input).addEventListener(input, function(e){ const results idx.search(e.target.value); const container document.getElementById(results); container.innerHTML results.map(r pstrong${messages.find(mm.idr.ref).sender}/strong: ${messages.find(mm.idr.ref).content}/p ).join(); }); /script /body /htmlPython 生成此 HTML 的关键是将export_to_json()的结果嵌入script标签def export_to_html(messages: list, output_path: str): # 先生成 JSON 数据字符串不换行减小体积 json_str json.dumps( [{id: m[id], timestamp: m[timestamp], sender: m[sender][nickname], content: m[content].get(text, )} for m in messages], ensure_asciiFalse ) html_template f!DOCTYPE html htmlheadmeta charsetUTF-8title微信聊天记录搜索/title script srchttps://cdn.jsdelivr.net/npm/lunr2.3.9/lunr.min.js/script /headbodyinput typetext idsearch-input placeholder搜索消息... stylewidth:100%; padding:10px;div idresults/div scriptconst messages {json_str};/* lunr 代码同上 *//script/body/html with open(output_path, w, encodingutf-8) as f: f.write(html_template) print(f✅ HTML 导出完成{output_path})用户双击search.html即可本地运行输入关键词实时高亮匹配消息——这才是真正的「私人聊天搜索引擎」。5. 避坑指南那些让导出失败 90% 的真实血泪经验这个工具链看似简单实则遍布深坑。以下 5 条是我在帮某高校实验室、某跨境 SaaS 团队、某独立咨询师落地时反复踩中、反复修复的高频问题。每一条都附带现象、根因与可立即执行的解决方案。5.1 现象Androidadb backup失败手机端无弹窗命令卡住原因Android 8.0 系统默认禁用adb backup功能需手动开启「USB 调试安全设置」。该选项隐藏在「开发者选项」最底部且名称不包含backup极易遗漏。解决进入「设置 关于手机 连续点击版本号 7 次」开启开发者选项 → 「设置 系统 开发者选项」→ 滑动到底部 → 找到「USB 调试安全设置」并开启 → 再执行adb backup。注意不是「USB 调试」是「USB 调试安全设置」。5.2 现象iOS 备份解密后ChatStorage.sqlite仍打不开报错file is encrypted or is not a database原因未正确提取fileID。Manifest.db中fileID是 40 位 hex 字符串SHA1但部分工具如 DB Browser for SQLite导出时会自动补零或截断。更致命的是若用户设置了 iTunes 备份密码fileID就不再是明文而需用密码解密Manifest.db中的backupKeyBag。解决用命令行sqlite3 Manifest.db直接查询避免 GUI 工具干扰SELECT fileID FROM Files WHERE relativePath Documents/ChatStorage.sqlite;若备份有密码放弃解密改用「iMazing」等商业工具导出其内置密码破解模块或重做无密码备份设置 → Apple ID → iCloud → 关闭「iCloud 备份」→ 用 Finder 重新备份。5.3 现象导出的 CSV 在 Excel 中打开全是乱码中文显示为方块原因Excel 默认用系统编码如 GBK打开文件而 Python 写入的是 UTF-8。utf-8-sig编码会在文件开头写入 BOMByte Order MarkExcel 识别为 UTF-8。但部分旧版 Excel尤其 Windows 7BOM 识别失败。解决方案 A推荐写入时用encodingutf-8-sig已写在代码中方案 B兼容旧版改用encodinggbk但需确保所有字段不含 GBK 不支持字符如 emoji方案 C终极导出为.xlsx用openpyxl库完全规避编码问题。5.4 现象群聊消息导出后所有发送者都显示为「群聊」无法区分张三李四原因Message.talker在群聊中恒为群 IDchatroom_xxx而实际发言者信息藏在content的 XML 中且不同微信版本 XML 结构微调如appmsgdesvsmsgfromusername。解决优先用正则匹配【昵称】模式微信 UI 显示规则稳定备用 XML 解析同时尝试root.find(.//des)、root.find(.//fromusername)、root.find(.//displayname)若仍失败在导出结果中标记sender_id群聊内未知并记录原始content供人工核查。5.5 现象导出的 JSON/HTML 中图片链接失效imgPath指向/data/data/...等绝对路径原因imgPath是 Android 微信内部路径备份解包后该路径不存在。真实图片文件在备份包的apps/com.tencent.mm/files/或apps/com.tencent.mm/cache/下但文件名被哈希重命名无直接映射。解决务实方案导出时只保留content中的img urlxxx忽略imgPath。URL 是 CDN 地址长期有效存档方案编写额外脚本遍历备份包中所有.jpg/.png文件用exiftool或PIL读取创建时间与消息时间戳比对误差 ±30 秒建立哈希映射表。但此方案耗时且成功率约 70%仅推荐对关键图片存档时启用。6. 进阶技巧用正则预处理 时间范围过滤打造精准导出流水线导出不是终点而是分析的起点。我常把导出工具嵌入一个「精准导出流水线」先按业务规则过滤再结构化最后交付。其中两个技巧极大提升效率——正则预处理清洗脏数据时间范围过滤聚焦关键期。6.1 正则预处理三步清洗让消息文本可直接用于 NLP微信content字段充满干扰符号br换行标签、span样式、emoji 编码\u200d、URL 编码%E4%BD%A0%E5%A5%BD。直接喂给分词器会崩。我用三步正则清洗import re import urllib.parse def clean_wechat_content(text: str) - str: # Step 1: 移除 HTML 标签保留换行 text re.sub(r[^], \n, text) # Step 2: 解码 URL 编码如 %E4%BD%A0%E5%A5%BD → 你好 text urllib.parse.unquote(text) # Step 3: 移除控制字符和多余空白保留中文、英文、数字、常用标点 text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\s\u3000-\u303f\uff00-\uffef。“”‘’【】《》、], , text) text re.sub(r\s, , text).strip() return text # 在 extract_message_content() 后调用 if content_obj[type] text: content_obj[text] clean_wechat_content(content_obj[text])清洗后你好br世界%21→你好 世界!可直接输入 jieba 分词或 langchain 文本分割器。6.2 时间范围过滤用 SQL WHERE 子句替代 Python 循环新手常犯错误把全部百万级消息读入内存再用 Pythonfor循环if msg_time between start and end过滤。这既慢又吃内存。正确做法是在 SQLite 查询层就过滤def query_messages_by_time(db_path: str, start_ts: int, end_ts: int) - list: start_ts, end_ts: 秒级 Unix 时间戳如 1700000000 conn sqlite3.connect(db_path) conn.row_factory sqlite3.Row # 返回字典而非元组 # 直接在 SQL 中过滤 createTime毫秒 sql p a hrefhttps://download.csdn.net/download/algae/92352175 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
RELATED

相关推荐

SpringBoot竞赛管理系统开发实践与架构解析

SpringBoot竞赛管理系统开发实践与架构解析

1. 项目背景与核心价值在大学校园里,学科竞赛和科创活动是培养学生创新能力的重要途径。作为一名经历过多次竞赛指导的教师,我深刻体会到传统纸质化管理的痛点:报名表堆积如山、成绩统计耗时费力、通知传达不及时。去年我校电子设计大赛期间&…

📅 2026/10/14 7:50:17
微信聊天记录导出:从加密数据库到结构化数据的完整技术路径

微信聊天记录导出:从加密数据库到结构化数据的完整技术路径

简介:这是一款面向普通微信用户与轻量级开发者的数据管理工具,解决聊天记录难以长期保存、跨设备查看及多格式复用的痛点。资源为精简型源码包,共3个文件:1个.inscode配置文件(定义导出规则与路径)、1个ind…

📅 2026/10/14 7:50:17
AI Agent框架选型与落地:从ReAct单智能体到多智能体协作

AI Agent框架选型与落地:从ReAct单智能体到多智能体协作

简介:一份面向人工智能研发、系统设计及智能应用落地从业者的AI Agent框架综述,聚焦大语言模型驱动的智能体技术选型与工程实践。文档系统拆解Agent的“感知-规划-行动”闭环,详解推理、记忆、工具、行动四大核心组件,并对比ReAct…

📅 2026/10/14 7:50:17
MORE NEWS

更多资讯

📰

Java方法深度解析:从值传递、重载重写到Lambda的设计艺术

Java里最基础也最容易被低估的知识点,就是方法。我面试过不少候选人,问框架技术能聊一小时,但问到“方法传参到底是值传递还是引用传递”,很多人一下就卡住了。工作这些年我越发觉得,方法不仅是一段代码的容器&#xf…

📰

具身智能可信度分级:从系统框架到工程实践的完整指南

1. 项目概述1.1 核心需求解析说起来,具身智能在圈子里已经火了好一阵子了,但真正把它当成一个系统性问题来看待的人并不多。我见过不少团队拿到机器人和机械臂之后,第一反应就是“赶紧跑通一个demo”,结果demo是跑起来了&#xff…

📰

小米14系列定价策略与智能手机成本分析

1. 事件背景与核心议题2023年第四季度,多家国产手机品牌陆续发布新一代旗舰机型,行业普遍出现价格上浮趋势。作为国内市场份额前三的小米集团,其产品定价策略受到消费者广泛关注。在小米14系列发布会后的媒体访谈环节,集团创始人雷…

📰

从极简命名到自动化实践:拆解轻量级任务聚合工具的设计与实现

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维 第一次看到“rea”这个标题,很多人会愣一下——三个字母,没有上下文,没有说明,甚至不知道它指代什么。但恰恰是这种极简命名,在技术圈和创意圈里…

📰

Python约束求解实战:2018刑侦科推理测试题穷举与剪枝

1. 这道题到底在考什么第一次看到"2018刑侦科推理测试题"这个标题,很多人以为是某个真实案件的卷宗,点进去才发现是一道纯逻辑推理题。它最早在2018年刷屏,号称是某类推理能力测试的题目,一共10道选择题,每道…

📰

React Native鸿蒙应用Tab导航实现指南

1. 项目概述 作为一名从React Native转战鸿蒙开发的工程师,我深刻理解跨平台开发中导航系统的重要性。这次要分享的是一个完整的React Native鸿蒙应用主页Tab导航实现方案,包含底部导航栏、页面切换和图标状态切换三大核心功能。 在移动应用开发中&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬