You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter程序打包为单EXE后SQLite数据丢失问题求助及解决方案

解决Tkinter+SQLite程序单EXE打包后数据丢失问题

我最近用Python的Tkinter开发了一款指标跟踪GUI工具,基于sqlite3实现数据存储,支持完整的CRUD(创建、读取、更新、删除)操作。在VSCode中运行时一切正常——数据能正常保存,关闭重启后所有数据都能保留,功能毫无问题。

但用auto-py-to-exe将程序打包成单EXE文件后,出现了棘手的问题:运行EXE时可以正常保存数据,然而关闭程序再次打开后,所有数据全部丢失!

为了定位问题,我简化了核心代码,聚焦于生成唯一标识、获取当前时间、数据库创建与校验,以及history和indic两张数据表的增删查等关键功能。

尝试过的无效方案

  • 编写了适配PyInstaller临时目录的路径重定义函数,但单EXE模式下的数据丢失问题依然存在
  • 切换为单目录打包模式时,数据可以正常保存,但我的需求是单EXE的打包形式

最终可行解决方案

后来采用了Roland Smith的解决方案,将数据库文件存储到用户目录下,成功解决了单EXE模式下的数据丢失问题。关键代码如下:

import os
from sqlalchemy import create_engine

user_folder = os.environ["HOMEPATH"]
engine = create_engine(f'sqlite:///C:\\{user_folder}\\nameofadatabase.db', echo=True)

背后的原理很清晰:单EXE打包后的程序在运行时会将自身解压到临时目录,若将数据库文件存放在该临时路径中,程序关闭后临时目录会被系统删除,数据自然也就丢失了。而将数据库文件存储到用户目录这种持久化路径下,就能确保数据在程序重启后依然保留。

内容的提问来源于stack exchange,提问作者walkingtomron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:37:44