需要使用 python 的数据库连接的概述说明

Need overview explanation of dbase connectivity using python

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

有人可以解释或指出 link 解释 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 一直是我选择的工具,除了问题中描述的以外没有任何问题。

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

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

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

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

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

编辑添加: 将数据库想象成您需要激活的 'black box',将其驱动程序想象成电源插座。 ODBC 驱动程序是一种特定类型的套接字(ODBC 是微软制定的标准)。如果您使用从 python(如 pyodbc)到数据库的 ODBC 插件,您需要确保数据库有一个 ODBC 套接字 installed/activated。 但是你的数据库也可以有其他套接字,比如 postgres 上可用的 python-compatible DBAPI。在那种情况下,您可以使用不同的直接 DBAPI 连接器,例如 psycopg2。