如何通过连接到 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 文件的主要内容,如果未能解决你的问题,请参考以下文章