1

我使用 python 和 postgreql 已经一年多了。我可以通过盲目使用各种库来连接和使用 postgres 数据库。但是每当我改变平台(最近从 macOS 笔记本电脑到远程 ubuntu 服务器)时,我都会经历一天左右的时间来尝试让库工作,例如。我在某些模块中使用了“pyodbc”,但是当我将代码迁移到服务器时,我不得不切换到“pg8000”,因为这些模块一直在抛出错误。

有人可以解释或指向一个链接,解释 python 如何连接到 dB 的吗?例如,为什么我需要一个用于“pyodbc”的 MS ODBC 驱动程序来连接到 Azure SQL 或 postgresql,但“pg8000”似乎根本不需要连接到 postgresql?当我移动到 Ubuntu 环境并安装 ODBC 驱动程序时,它们显示在 /etc 和 /opt(用于 MS ODBC)下的根目录下,但也出现在我的 Conda 环境(/anaconda3/envs/)中,我不知道哪个是'ODBC.ini' 的正确选择?

就像我说的,我可以让事情发挥作用,但我真的不明白它们为什么会发挥作用,这意味着我每次处理环境变化时都会浪费时间进行试验。我还没有在网上找到一个解释,它涵盖的不仅仅是一个非常具体的情况,例如。'这里是如何安装我们的驱动程序......'任何帮助将不胜感激。

最终更新

跟随回应特别是。@Thompson 下图似乎是最终解释,我对在哪里寻找答案有了更好的了解。对于记录 pyodbc,SQLAlchemy 和 pg8000 一直是我选择的工具,除了问题中所述之外没有任何问题。

在此处输入图像描述

4

2 回答 2

2

驱动程序特定于数据库。 ODBC是一个两阶段的过程。有ODBC驱动程序管理器,然后有允许您与数据库对话的特定于数据库的驱动程序。您不需要ODBC连接到 Postgresql 服务器。如果你正在使用 Python,你只需要一个 Postgres 驱动程序。你已经找到了pg8000。我的偏好是psycopg2

于 2020-11-10T15:18:20.447 回答
2

pyodbc 实际上不是驱动程序,也不包含驱动程序,它是“ODBC 数据库模块”,因此它更像是从 python 到 ODBC 驱动程序再到某个数据库的接口。这就是为什么要使用它,您必须有一个实际的单独驱动程序才能连接。微软拥有的 Azure SQL 将合理地需要 Microsoft 的 ODBC 驱动程序,而 Postgres 将需要 Postgres ODBC 驱动程序等......

ODBC 驱动程序管理器是特定于平台的,而 ODBC 驱动程序是特定于数据库的。这可以解释为什么如果您正在更改平台或数据库,则需要更改驱动程序。

正如 Adrian 所指出的,您不需要 ODBC 驱动程序用于 postgres,更常见的是使用 postgres/python 驱动程序(例如: https ://wiki.postgresql.org/wiki/Python )

psycopg2 是一个实际的 PostgresSQL 驱动程序。它充当从 Python 到 postgres 的客户端,无需中介。这就是为什么您在使用它时不需要安装任何其他东西的原因。我没有使用过 pg8000,但根据这个列表,它也是一个驱动程序,所以你不需要其他任何东西。

编辑添加:将数据库视为您需要激活的一些“黑匣子”,并将其驱动程序视为电源插座。ODBC 驱动程序是一种特定类型的套接字(ODBC 是 Microsoft 开发的标准)。如果您使用从 python(如 pyodbc)到数据库的 ODBC 插件,您需要确保数据库安装/激活了 ODBC 套接字。但是您的数据库也可以有其他套接字,例如 postgres 上提供的与 python 兼容的 DBAPI。在这种情况下,您使用不同的直接 DBAPI 连接器,例如 psycopg2。

于 2020-11-10T17:45:58.790 回答