我见过许多用于 python 的 postgresql 模块,如 pygresql、pypgsql、psyco。它们中的大多数都符合 Python DB API 2.0,有些不再积极开发。你推荐哪个模块?为什么?
6 回答
psycopg2 似乎是最受欢迎的。我从来没有遇到过任何麻烦。实际上,PostgreSQL 也有一个纯 Python 接口,称为bpgsql。我不会在 psycopg2 上推荐它,但它最近变得足以支持 Django,如果你不能编译 C 模块,它很有用。
我建议 Psycopg 优于 Psycopg2,因为第一个似乎更稳定。至少在我的经验中。我有一个 24/7 运行的应用程序,有时我会从 Psycopg2 收到随机内存崩溃(双重释放或损坏错误)。我无法快速或轻松地调试,因为它不是 Python 错误而是 C 错误。我刚刚切换到 Pyscopg,之后我没有遇到任何崩溃。
此外,正如在另一篇文章中所说,bpgsql似乎是一个非常好的选择。它稳定且易于使用,因为您不需要编译它。唯一不好的一面是库不是线程安全的。
Pygresql 看起来不错,有一种更直接的方法可以使用这个库查询数据库。但我不知道这个有多稳定。
在过去的 3 年里,我使用 pg8000 没有任何问题。它是最新的,可在 pypi 上使用,适用于 python2 和 python3。您可以使用“pip install pg8000”快速获取它(如果您在防火墙后面,请不要忘记使用 --proxy=yourproxy:yourport)。
如果您担心线程安全,它还提供线程安全分数(参见: http: //pybrary.net/pg8000/dbapi.html和https://www.python.org/dev/peps/pep- 0249/用于定义不同级别的线程安全)(尽管我还没有使用 psql 的线程)。
根据我的经验,psycopg2 是最常用的库。就像你说的,它符合 DB API 2.0,它提供了一个可靠的接口来使用。
对于那些发现标准 API 有点过于冗长且难以使用的人,我制作了一个小型库,可能会有所帮助:
Psycopg1 以在多线程环境(如 Web 应用程序)中比 Psycopg2 更好的性能而闻名,尽管没有维护。两者都写得很好并且坚如磐石,我会根据用例选择这两者之一。
我只使用 psycopg2 并且对此没有任何问题。