如何通过连接到 sqlite3 数据库来制作可执行的 python tkinter 文件

Posted

技术标签:

【中文标题】如何通过连接到 sqlite3 数据库来制作可执行的 python tkinter 文件【英文标题】:How to make an executable python tkinter file with a connection to a sqlite3 database 【发布时间】:2020-10-24 18:11:16 【问题描述】:

我制作了一个简单的 CRUD 数据库程序,就像一个非常简单的库存系统。它能够通过对 SQLite3 数据库进行查询来从数据库中读取、更新数据库、从数据库中删除内容等。现在,我想让它可执行,以便我可以将它分享给用户,让他们试用该程序。

到现在为止,我已经用这样的代码尝试了 pyinstaller: pyinstaller --onefile --add-data "database.db:." inventory.py

它成功编译了程序。但是,当我执行可执行文件时,终端出现sqlite3.OperationalError: no such table: items_list 的错误,并立即关闭程序。

这是我连接到 sqlite3 数据库的程序中的代码:

db = sqlite3.connect('database.db')
cursor = db.cursor()

为了在树视图中显示项目,我使用了:

def update(rows):
    tree.delete(*tree.get_children())
    for i in rows:
        tree.insert('', 'end', value=i)
...
query = 'SELECT ItemName, CardNo, StockCount FROM items_list'
cursor.execute(query)
rows = cursor.fetchall()
update(rows)

有没有一种方法可以将 .py 文件与 .db 文件结合起来制作一个可执行的单个程序?非常感谢您的帮助!

【问题讨论】:

不确定是否要将数据库嵌入 .exe:不会保存任何更改。每次您要运行 exe 时,它​​都会从构建 exe 时拥有的相同数据库数据开始 @EricMathieu hmmm 那么如果我想让程序能够连接到 sqlite3 数据库应该怎么做呢? 我对 sqlite3 数据库一无所知,但我可以告诉你,没有什么能阻止你访问没有嵌入 exe 的数据库 @EricMathieu 问题是我很困惑,因为连接没有错误,但是当 .exe 运行 sqlite 的查询时,它没有正确读取它(sqlite3.OperationalError:没有这样的表:items_list) .我已经尝试通过互联网并没有找到任何解决方案。 【参考方案1】:

我编写了类似的 Inventory 类型脚本,它们都适用于 sqlite 数据库。抛开所有变数。我使用pyinstaller.exe --onefile --windowed 作为命令。使用 Windows 10 时,它放在C:\...\dist 目录中。我将数据库复制到与.exe 文件相同的路径,并在.exe 文件中使用了所有导入的脚本,并相应地访问相应的数据库。还基于其他变量,例如安装相应的程序。 (我只是为了确保不会遇到任何关于 alpha 测试的问题。)然后还取决于代码何时相应地更新 .db 文件。 (当我遇到类似问题时,这种方法对我有用)

【讨论】:

以上是关于如何通过连接到 sqlite3 数据库来制作可执行的 python tkinter 文件的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3:连接到云中的数据库(S3)

python连接sqlite3

如何将python连接到sqlite3并一次填充多行

我的可执行 JavaFX 文件如何连接到 MySQL 数据库?

如何从用python制作的gui连接到mysql数据库

如何连接到远程 Windows 机器以使用 python 执行命令?