Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QtSql vs MySQLdb vs SQLAlchemy_Python_Mysql_Pyqt - Fatal编程技术网

Python QtSql vs MySQLdb vs SQLAlchemy

Python QtSql vs MySQLdb vs SQLAlchemy,python,mysql,pyqt,Python,Mysql,Pyqt,我正在开发一个PyQt程序,它将很快从xml类型的后端切换到托管在本地MySQL服务器上的后端。我一直在试着阅读这三种选择中的每一种,但我认为最好是问问诸神 我目前在MySQLdb中执行MySQL的经验,主要是因为我不知道其他两种方法的存在。简言之,问题是每种方法的优缺点是什么,你会选择哪一种?干杯 我不是上帝,但我有一些意见。我在Python中使用SQL的主要经验是使用Django 解决方案取决于你愿意承诺什么。如果您想坚持使用Qt库,而只使用PyQt库,那么就使用QtSql。如果您只想快速构

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


我目前在MySQLdb中执行MySQL的经验,主要是因为我不知道其他两种方法的存在。简言之,问题是每种方法的优缺点是什么,你会选择哪一种?干杯

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

解决方案取决于你愿意承诺什么。如果您想坚持使用Qt库,而只使用PyQt库,那么就使用QtSql。如果您只想快速构建应用程序,但又需要一些依赖项,那么我会选择SQLAlchemy。您可能会遇到一些问题,例如,问题,然后您需要引入更多库或拔出头发

因此,在一个漂亮的列表样式中:

MySQLdb
  • 赞成:纯SQL
  • 缺点:丑陋
  • 缺点:要求您编写SQL
  • 缺点:要求您管理光标,不进行任何缓存、参数化等操作
  • 缺点:在不重写所有数据库代码的情况下,无法切换到其他数据库后端
结论:不要将其用于任何你想投入生产的东西

QtSQL
  • 赞成:只使用Qt库
  • pro:将返回Qt对象,因此它将与Qt的标准小部件集成
  • pro:可以使用Qt支持的任何数据库后端
  • 缺点:仍然需要编写SQL
结论:如果希望编写更少的UI代码和更多的数据库代码,请选择此选项

炼金术
  • 赞成:所有数据库逻辑都可以用Python代码编写(因为它是一个ORM)
  • pro:支持许多数据库后端
  • 缺点:可能需要一些额外的配置才能使Qt正常工作
结论:如果您想编写更少的数据库代码,并且可以解决一些API问题,请选择此选项



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

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

我甚至不会让SQLAlchemy对您的影响太大,因为SQLAlchemy不是天生的Qt。你总是可以将一个模型子类化来处理你的定制后端,或者只是手动向一个标准模型提供来自sqlalchemy的数据!谢谢你的这份清单;非常有用。你会认为炼金术也更像是蟒蛇术吗?我已经使用PyQt有一段时间了,但在其中学习新类似乎总是比使用python库更痛苦。也许这甚至不是一个值得问的问题。。好消息是无论如何我都必须过滤我的SQL数据,所以我不会在没有某种干预的情况下直接输入模型;除非我也这么做了。虽然使用纯mysql库测试查询等是可以的,但是如果你将它嵌入到一个使用已经提供了抽象层的库的应用程序中,那么它是毫无意义的。就过滤结果而言(除非您指的是非SQL过滤),QSqlTableModel有setFilter方法,等等。。。所以你可以直接给你的模型输入数据,只需加上过滤器,它就会自动完成!刚刚开始炼金术。真不敢相信我用过MySQLdb,胡说八道。就像5行代码!MySQLDb的另一个缺点是它没有真正的参数化