【问题标题】:QtSql vs MySQLdb vs SQLAlchemyQtSql vs MySQLdb vs SQLAlchemy
【发布时间】:2014-06-11 09:07:53
【问题描述】:

我正在开发一个 PyQt 程序,它将很快从 xml 类型的后端切换到托管在本地 MySQL 服务器上的后端。我一直在尝试阅读这三个选项中的每一个,但认为最好问问你们这些神。

我目前在使用 MySQLdb 执行 MySQL 方面的经验,并且一直在使用这主要是由于对其他两种方法的存在一无所知。简而言之,问题是每种方法的优缺点是什么,您会选择哪一种?干杯!

【问题讨论】:

    标签: python mysql pyqt


    【解决方案1】:

    我不是神,但我确实有一些意见。我在 Python 中使用 SQL 的主要经验是使用 Django。

    解决方案取决于您愿意承诺什么。如果您想坚持使用 Qt 库而只使用 PyQt 库,那么请使用 QtSql。如果您只想快速构建应用程序但引入更多依赖项,那么我会选择 SQLAlchemy。您可能会遇到asker of this question 之类的问题,然后您需要拉入更多库或拉出您的头发。

    所以,在一个不错的列表样式中:

    MySQL数据库

    • 专业版:纯 SQL
    • 缺点:丑
    • 骗局:要求您编写 SQL
    • con:需要您管理游标,不进行任何缓存、参数化等...
    • 缺点:如果不重写所有数据库代码,就无法切换到不同的数据库后端

    VERDICT:不要将它用于您将投入生产的任何东西

    QtSQL

    • pro:仅使用 Qt 库
    • pro:将返回 Qt 对象,因此它将与 Qt 的标准小部件集成
    • pro:可以使用 Qt 支持的任何数据库后端
    • 缺点:仍然需要你编写 SQL

    VERDICT:如果您想编写更少的 UI 代码和更多的数据库代码,请选择此选项

    SQLAlchemy

    ​​>
    • pro:所有数据库逻辑都可以用 Python 代码写出来(因为它是 ORM)
    • pro:支持许多数据库后端
    • con:可能需要一些额外的配置才能让 Qt 与 Qt 完美配合

    VERDICT:如果您想编写更少的数据库代码并且可以解决一些 API 问题,请选择此选项。


    另外,不用担心任何选择的性能——它们都应该大致相同,并且大部分时间都花在 I/O 上。

    【讨论】:

    • 而且我什至不会让它对您产生太大影响,因为 SQLAlchemy 不是原生 Qt。您始终可以将模型子类化来处理您的自定义后端,或者只是手动向标准模型提供来自 sqlalchemy 的数据。
    • 我不知道我这么恨自己!感谢这份清单;非常有帮助。您是否还会认为 SQLAlchemy 也更 Pythonic?我已经使用 PyQt 有一段时间了,但是在其中学习新类似乎总是比 python 库更痛苦。也许这甚至不是一个有效的问题。好消息是无论如何我都必须过滤我的 SQL 数据,所以我不会在没有某种干预的情况下直接提供模型;除非我也做错了。
    • 虽然可以使用纯 mysql 库来测试查询等,但如果您将其嵌入到使用已经提供抽象层的库的应用程序中,那么它就毫无意义了。至于过滤你的结果(除非你的意思是非 SQL 过滤),QSqlTableModel 有 setFilter 方法等......所以你可以直接为你的模型提供数据,只需添加过滤器,它会自动完成!
    • 刚刚让 SQLAlchemy 工作。不敢相信我曾经使用过 MySQLdb,天哪。这就像 5 行代码!
    • MySQLDb 的另一个缺点是它没有真正的参数化
    【解决方案2】:

    我知道有点晚了,但我建议你看看 Camelot (http://www.python-camelot.com/)。它将 PyQt 和 SQLAlchemy 集成在一起,因此您可以编写更少的 UI 代码和数据库代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 2016-04-23
      • 2020-04-22
      • 1970-01-01
      • 2020-09-08
      • 2020-12-24
      • 2014-08-17
      • 2011-09-18
      相关资源
      最近更新 更多