使用MySQL代替SQLite3
我正在开发一个需要数据库连接的Python应用程序。最开始我用的是sqlite3,但它开始出现错误(数据库被锁定了)。所以我决定换成MySQL数据库,结果效果很好,没有错误。
不过有一个问题,就是我需要让每个使用我这个应用程序的用户在他们的电脑上安装MySQL服务器(比如说appserv)。
我想知道有没有办法让MySQL像sqlite3一样,不需要用户安装额外的东西。这样我就可以制作一个Python脚本,然后用pyInstaller.exe把它转换成exe文件,用户就不需要安装MySQL服务器了。
更新: 在检查代码后,我发现打开的连接没有正确关闭,而在使用sqlite3时没有问题。谢谢大家!
2 个回答
如果你的应用程序是一个独立的系统,每个用户都有自己的私有数据库,那么你就只能在每台运行这个应用的电脑上安装MySQL。你不能把MySQL打包进你的应用里,这样就不需要单独安装了。
其实有一个MySQL的嵌入版,你可以把它集成到你的应用中(感谢评论中的Carsten指出这一点)。更多信息可以在这里找到:http://mysql-python.blogspot.com/。要让这个嵌入版正常工作可能需要一些努力(在Windows上,你可能需要从源代码编译),而且在生成可执行文件时还需要额外的工作来打包,但这可能是一个适合你的MySQL解决方案。
我刚刚更新了一个使用SQLite的网页应用,随着使用人数的增加,它开始出现“数据库被锁定”的错误。通过仔细重写数据库代码,我成功地制作了一个可以稳定处理中等到高负载的系统(在一个15人的公司环境下),仍然使用SQLite——你需要小心保持连接的时间尽可能短,并且始终调用.close()来关闭它们。如果你的应用确实是单用户的,使用SQLite应该没有问题——如果它是单线程的,那就更没问题了。
这要看情况(答案中有更多的“看情况”)。
如果你需要让你的应用程序的用户之间共享数据,那你就需要在某个地方设置一个mysql数据库服务器,你的应用程序需要能够访问它。而且,性能真的会受到网络的影响——这取决于你的应用程序会多频繁地使用这个数据库。你的应用程序只需要知道怎么和数据库服务器“对话”——可以用像 MySQLdb
或 pymysql
这样的Python mysql驱动。
如果你不需要用户之间共享数据,那 sqlite
可能是一个选择。或者可能不是——这取决于你想存储什么、为什么存储以及你需要对数据做什么。
所以,这里有更多的问题而不是答案,可能更适合做个评论。至少,考虑一下我说的这些。
另外可以看看:
- https://stackoverflow.com/questions/1009438/which-database-should-i-use-for-my-desktop-application
- Python桌面应用程序数据库
- Python桌面数据库应用程序框架
希望这些对你有帮助。