【问题标题】:using mysql instead of sqlite3使用 mysql 而不是 sqlite3
【发布时间】:2014-04-02 14:42:17
【问题描述】:

我正在开发需要数据库连接的 python 应用程序。我使用 sqlite3 开发了我的应用程序,但它开始显示错误(数据库已锁定)。所以我决定改用 MySQL 数据库。它非常好没有错误.. 唯一的问题是我需要让每个使用我的应用程序的用户在他的电脑上安装 MySQL 服务器(例如 appserv).. 所以我可以让mysql像python lib之外的sqlite3。所以我可以生成一个python脚本,可以通过工具pyInstaller.exe转换成exe文件,不需要用户安装mysql服务器???

更新: 在查看代码后,我发现打开的连接没有正确关闭并且可以正常使用 sqllite3 ..谢谢大家

【问题讨论】:

标签: python mysql sqlite


【解决方案1】:

这取决于(答案中更多“取决于”)。

如果您需要在应用程序的用户之间共享数据 - 您需要在某处设置一个 mysql 数据库服务器,您的应用程序需要能够访问它。而且,性能实际上取决于网络——取决于应用程序使用数据库的程度。应用程序本身只需要知道如何与数据库服务器“对话”——python mysql 驱动程序,如MySQLdbpymysql

如果您不需要在用户之间共享数据 - 那么sqlite 可能是一种选择。或者可能不是 - 取决于您想在那里存储什么、用于什么以及您需要对数据做什么。

所以,问题多于答案,可能更适合发表评论。至少,想想我说过的话。

另见:

希望对您有所帮助。

【讨论】:

  • 谢谢,我想使用 sqlite3,但提到的错误是一场噩梦
  • @user2980054 好的,那么您能否更具体地说明如何在代码中打开和关闭 sqlite3 连接?谢谢。
  • 该应用程序是市场经理程序,使用户可以轻松购买、出售、报告、获取利润计算等。例如:填写一些表格后,他单击打开数据库连接的按钮和插入一个或多个 sql(s)
  • @user2980054 我敢打赌你只是没有正确关闭 sqlite 连接。见stackoverflow.com/questions/9561832/…
  • 在查看代码后,我发现打开的连接没有正确关闭并且可以正常使用 sqllite3 ..谢谢
【解决方案2】:

如果您的应用程序是一个独立系统,每个用户都维护自己的私有数据库,那么您别无选择,只能在运行该应用程序的每个系统上安装 MySQL。 您不能将 MySQL 捆绑到您的应用程序中,这样就不需要单独安装。

有一个嵌入式版本的 MySQL,您可以将其构建到您的应用程序中(感谢 cmets 中的 Carsten 指出这一点)。更多信息在这里:http://mysql-python.blogspot.com/。让它工作可能需要一些努力(在 Windows 上,您显然需要从源代码构建它)并且在生成可执行文件时需要做更多的工作才能将其打包,但这可能是您的 MySQL 解决方案。

我刚刚使用 SQLite 完成了一个 Web 应用程序的更新,随着使用量的增加,该应用程序已经开始报告 Database is locked 错误。通过仔细重写数据库代码,我能够生成一个系统,可以处理中度到重度使用(在 15 人公司的情况下)仍然可靠地使用 SQLite——你必须小心保持你的连接最少必要的时间并始终对它们调用 .close() 。如果您的应用程序确实是单用户应用程序,那么使用 SQLite 支持它应该没有问题——如果它是单线程的,那就更是如此。

【讨论】:

  • “您不能将 MySQL 捆绑到您的应用程序中,这样就不需要单独安装。” -- Yes you can!
  • 我的应用程序是针对单用户的,每个数据库连接都以 close() 函数结束..但是即使在设置参数 timeout=20 之后,SQLite3 仍然向我显示锁定的数据库错误
  • @Carsten:谢谢,更新以反映这个我以前不知道的库的存在。
  • @user2980054:那么您的代码中某处有错误。可能你在某个地方吞下了一个异常,在数据库上留下了一个未提交的事务。使用 SQLite 完全可以使用单线程、单用户应用程序,这是最适合用于此类应用程序的数据库。
  • 是否需要在每次执行 sql 后提交 ..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多