3

我正在寻找一个可以访问 MySQL 和 PostgreSQL 的纯 Python SQL 库。

唯一的要求是在 Python 2.5+ 上运行并且是纯 Python,因此它可以包含在脚本中并且仍然可以在大多数平台上运行(无需安装)。

事实上,我正在寻找一个简单的解决方案,它允许我编写 SQL 并将结果导出为 CSV 文件。

4

3 回答 3

4

两部分答案:

A)这是绝对可能的。

B)根据您的具体问题,纯python 可能是解决问题的好方法,也可能不是。

解释:

SqlAlchemy库带有两个组件:更流行的“ORM”和它位于其之上的“Core”。任何一种都可以让您以 SqlAlchemy 格式(即 Python)编写 SQL 命令;然后 SqlAlchemy 会将语句编译到 Mysql 或 PostgreSQL 并连接到适当的数据库。

SqlAlchemy 是一个很棒的库,我推荐它用于几乎所有的东西。虽然您确实必须以它们的格式编写语句,但它很容易上手——并且您可以随时切换到您想要的几乎任何底层数据库库。无论您是否需要支持多个后端,它都是在任何数据库项目中使用的完美平台。

SqlAlchemy 通过标准 DBAPI 驱动程序与数据库对话,并且确实支持纯 python 的多个选项,特别是pymysqlpypostgresql驱动程序(http://docs.sqlalchemy.org/en/latest/core/engines.html#supported-dbapis

至于编写 csv,标准库已经涵盖了。

import csv

所以警告?

以下可能适用于您的情况,也可能不适用于您的情况:

python 世界中大多数更高级别的数据库模块仍然推荐 mysql-python 和 psycopg——它们都不是纯 python 并且针对已安装的数据库进行编译/链接/配置。与在 CPython 下运行时的 c-extensions 相比,这在很大程度上似乎来自 API / 集成问题的混合以及各种纯 Python 包的速度。

有像我推荐的纯 python 驱动程序,但大多数评论者表示它们主要是实验性的。pymysql 作者声称稳定性和生产就绪性,一些博客开发人员对此提出了挑战。至于“稳定”或“实验”的含义,因项目而异。有些有不断变化的 API,有些不完整,有些是错误的。

您需要确保可以为每个支持您需要的确切操作的系统找到纯 python 驱动程序。这可能很简单,也可能很混乱。无论您使用 SqlAlchemy 还是其他工具,在选择 DBAPI 驱动程序时,您仍然会面临这个问题。

PyPy 项目(pure-python python 解释器)有一个 wiki,列出了各种包的兼容性:https ://bitbucket.org/pypy/compatibility/wiki/Home 我会听从他们的具体驱动建议。如果 PyPy 是您想要的平台,那么 SqlAlchemy 也可以在其上完美运行。

于 2012-08-08T17:39:40.567 回答
1

您是在寻找一个 ORM,还是一个允许您直接编写 SQL 语句并在存在差异的地方进行转换的库?

我不确定 psycopg2 是否是纯 python,但它肯定有绑定并且适用于所有平台。您仍然必须至少安装 psycopg2 才能与 PostgreSQL 数据库通信,因为 Python(据我所知)本身并不附带它。

从那里开始,还需要安装您想要的任何其他 ORM 库,但大多数都是在他们使用的任何后端之上的纯 python。

Storm、Django、SQLAlchemy 在它们的数据库层之上都有抽象层——根据你的描述,Django 可能是一个太大的框架,无法满足你的需求(对我来说),但它是一个流行的框架,SQLAlchemy 是一个久经考验的真正系统—— tho 有点笨拙,特别是如果你必须处理继承(在我看来)。我听说 Storm 很好,但我没有用它做太多测试,所以我不能完全说。

如果您希望混合和匹配(MySQL 中的一些表和 PostgreSQL 中的一些表)与可能是 MySQL 或 PostgreSQL 的单个数据库,我一直在研究一个名为 ORB 的 ORM,它更侧重于面向对象的设计并允许多个数据库和数据库之间的关系。现在它只支持 PostgreSQL 和 Mongo,只是因为我不需要 MySQL,但我愿意编写那个后端。代码可以在http://docs.projexsoftware.com/api/orb找到

于 2012-08-08T17:05:53.090 回答
1

使用 SQL 炼金术。它适用于大多数数据库类型,当然也适用于 postgres 和 MySQL。

于 2012-08-08T17:45:18.483 回答