我正在寻找一个可以访问 MySQL 和 PostgreSQL 的纯 Python SQL 库。
唯一的要求是在 Python 2.5+ 上运行并且是纯 Python,因此它可以包含在脚本中并且仍然可以在大多数平台上运行(无需安装)。
事实上,我正在寻找一个简单的解决方案,它允许我编写 SQL 并将结果导出为 CSV 文件。
我正在寻找一个可以访问 MySQL 和 PostgreSQL 的纯 Python SQL 库。
唯一的要求是在 Python 2.5+ 上运行并且是纯 Python,因此它可以包含在脚本中并且仍然可以在大多数平台上运行(无需安装)。
事实上,我正在寻找一个简单的解决方案,它允许我编写 SQL 并将结果导出为 CSV 文件。
两部分答案:
A)这是绝对可能的。
B)根据您的具体问题,纯python 可能是解决问题的好方法,也可能不是。
解释:
该SqlAlchemy
库带有两个组件:更流行的“ORM”和它位于其之上的“Core”。任何一种都可以让您以 SqlAlchemy 格式(即 Python)编写 SQL 命令;然后 SqlAlchemy 会将语句编译到 Mysql 或 PostgreSQL 并连接到适当的数据库。
SqlAlchemy 是一个很棒的库,我推荐它用于几乎所有的东西。虽然您确实必须以它们的格式编写语句,但它很容易上手——并且您可以随时切换到您想要的几乎任何底层数据库库。无论您是否需要支持多个后端,它都是在任何数据库项目中使用的完美平台。
SqlAlchemy 通过标准 DBAPI 驱动程序与数据库对话,并且确实支持纯 python 的多个选项,特别是pymysql
和pypostgresql
驱动程序(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 也可以在其上完美运行。
您是在寻找一个 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找到
使用 SQL 炼金术。它适用于大多数数据库类型,当然也适用于 postgres 和 MySQL。