【问题标题】:Which ORM to use for Python and MySql? [closed]哪个 ORM 用于 Python 和 MySql? [关闭]
【发布时间】:2016-10-01 10:01:39
【问题描述】:
所以我有一个数据库,其中存储了许多不同对象的大量信息;为了简化它,想象一下一个数据库,它在几年内存储了 100 只狗和 100 只猫的体重信息。我制作了一个 GUI,我希望其中一个选项卡允许用户输入新称重的重量或更改宠物过去的重量(如果错误)。
我使用 Qt Designer 创建了 GUI。之前,我使用 SqlAlchemy 与数据库进行通信。但是,PyQt4 也提供了 QtSql,我认为这是另一个 ORM?有人可以向我解释一下 ORM 究竟是如何工作的,SqlAlchemy、QtSql 甚至 Sql Connector 之间有什么区别?
【问题讨论】:
标签:
python
mysql
orm
sqlalchemy
pyqt
【解决方案1】:
Qt Sql是Qt库自带的SQL框架。它提供基本(和经典)类来访问数据库、执行查询和获取结果。*Qt 可以重新编译以支持各种 DBMS,例如 MySQL、Postgres 等。
Sql 连接器
我假设您指的是 MySql 连接器?
如果是这样,它是一组用于本地访问 MySql 数据库的 C++ 类。
类与 QtSQL 中的类几乎相同。但是你不必支持 Qt 的 Wrapper 层。但当然,您不能访问 MySQL 以外的其他数据库。
Sql 炼金术
很难简单解释 ORM 的复杂性。
对象关系映射。维基百科说:
“一种在不兼容的类型系统之间转换数据的技术
面向对象的编程语言”
这是一个很好的定义。它基本上是一种将表/查询数据映射到面向对象的数据结构的技术。
例如,ORM 引擎隐藏了将 TABLE 的字段显式映射到 OO 类的过程。
此外,无论您访问的是什么数据库,它的工作原理都是一样的(只要 ORM 知道 DBMS 方言)。
出于这样的目的,Python 语言和哲学非常适合 ORM。
但是像 SqlAlchemy 这样的 ORM 不是面向对象的数据库!
虽然它有一些限制。
如果您需要进行复杂的查询(相信我,它经常发生在特定的上下文中),正确使用它会变得有点棘手,并且您可能会遇到性能损失。
如果您只需要访问包含数百条记录的单个表...那不值得,因为初始化过程有点费力。
Z.