Требуется общее объяснение подключения к базе данных с использованием python

#python-3.x #postgresql #database-connection #pyodbc #pg8000

#python-3.x #postgresql #подключение к базе данных #pyodbc #pg8000

Вопрос:

Я работаю с python и postgreql уже более года. Я могу подключаться и работать с базами данных postgres, слепо используя различные библиотеки. Но всякий раз, когда я меняю платформу (совсем недавно с ноутбука macOS на удаленный сервер ubuntu) Я примерно через день пытаюсь заставить библиотеки работать, например. Я использовал ‘pyodbc’ в некоторых модулях, но когда я перенес код на сервер, мне пришлось переключиться на ‘pg8000’, потому что модули, поскольку они продолжали выдавать ошибки.

Может кто-нибудь объяснить или указать мне ссылку, объясняющую, как python подключается к базе данных? Например, зачем мне нужен драйвер MS ODBC для pyodbc для подключения к Azure SQL или postgresql, но «pg8000», похоже, вообще ничего не нужно для подключения к postgresql? Когда я перехожу в среду Ubuntu и устанавливаю драйверы ODBC, они отображаются в root в /etc и /opt (для MS ODBC), а также в моей среде Conda (/anaconda3/envs/), и я не знаю, какой правильный выбор для «ODBC.ini»?

Как я уже сказал, я могу заставить вещи работать, но на самом деле не понимаю, почему они работают, и это означает, что я трачу время на эксперименты каждый раз, когда сталкиваюсь с изменением среды. Я еще не нашел в Интернете объяснения, которое охватывало бы не только очень специфические обстоятельства, например. «вот как установить наш драйвер …» Любая помощь будет оценена.

Заключительное обновление:

Следуя ответам, особенно. @Thompson приведенная ниже диаграмма, похоже, является окончательной интерпретацией, и у меня есть лучшее представление о том, где искать ответы. Для записи pyodbc, SQLAlchemy и pg8000 были моими инструментами выбора без каких-либо проблем, за исключением случаев, описанных в вопросе.

введите описание изображения здесь

Комментарии:

1. Я бы нарисовал это примерно так .

Ответ №1:

pyodbc на самом деле не является драйвером и не содержит его, это «модуль для баз данных ODBC», так что это скорее интерфейс от python к драйверу ODBC к некоторой базе данных. Вот почему для его использования у вас должен быть фактический отдельный драйвер для подключения. Для Azure SQL, принадлежащего Microsoft, разумно потребуется драйвер ODBC от Microsoft, в то время как для Postgres потребуется драйвер ODBC Postgres и т. Д…

Диспетчер драйверов ODBC зависит от платформы, а драйвер ODBC зависит от базы данных. Это объясняет, почему, если вы меняете платформы или базы данных, вам необходимо сменить драйверы.

Как отметил Адриан, вам не нужны драйверы ODBC для postgres, чаще всего используются драйверы postgres / python (например: https://wiki.postgresql.org/wiki/Python )

psycopg2 является фактическим драйвером PostgresSQL. Он служит клиентом от Python до postgres, посредник не требуется. Вот почему вам не нужно устанавливать что-либо еще при его использовании. Я не использовал pg8000, но, судя по этому списку, это тоже драйвер, так что вам больше ничего не нужно.

ОТРЕДАКТИРОВАНО ДЛЯ ДОБАВЛЕНИЯ: представьте базу данных как некоторый «черный ящик», который вам нужно активировать, а его драйверы — как электрические розетки. Драйвер ODBC — это определенный тип сокета (ODBC — это стандарт, разработанный Microsoft). Если вы используете подключаемый модуль ODBC из python (например, pyodbc) к базе данных, вам необходимо убедиться, что в базе данных установлен / активирован сокет ODBC. Но в вашей базе данных могут быть и другие сокеты, например, совместимый с python DBAPI, доступный в postgres. В этом случае вы используете другой прямой соединитель DBAPI, например psycopg2.

Ответ №2:

Драйверы специфичны для базы данных. ODBC это двухэтапный процесс. Есть диспетчер ODBC драйверов, а затем есть драйверы, специфичные для базы данных, которые позволяют вам взаимодействовать с базой данных. Вам не нужно ODBC подключаться к серверу Postgresql. Если вы используете Python, вам просто нужен один из драйверов Postgres. Вы уже нашли pg8000 . Я предпочитаю psycopg2.