#python #postgresql
#python #postgresql
Вопрос:
Мне нужно подключиться к старой базе данных PostgreSQL (версии 7.3), и я использую Python 3.2 на компьютере с XP. Пакет py-postgresql показался подходящим, но, похоже, он использует только протокол 3.0, который был реализован в версии 7.4. Я хотел бы подключиться к этой базе данных с помощью Python, но когда я попытался, я получил неожиданную ошибку EOF, которая, как я полагаю, является результатом использования пакетом более нового протокола.
Я могу использовать программу pgAdminIII для подключения к базе данных просто отлично. Есть идеи?
Ответ №1:
К сожалению для вас, оба py-postgresql и psycopg2 поддерживают только протокол v3.
Я думаю, что ваш единственный вариант — использовать драйвер Postgres ODBC и подключиться к нему с помощью pyODBC или mxODBC. Существует порт pyodbc на Python 3.x, связанный с их главной страницей проекта.
Комментарии:
1. В итоге я использовал odbc из pywin32. Кажется, что python регулярно вылетает, но я разберусь с этим позже.
Ответ №2:
Попробуйте использовать PyGreSQL:
PyGreSQL — это модуль Python, который взаимодействует с базой данных PostgreSQL. В него встроена библиотека запросов PostgreSQL, позволяющая легко использовать мощные функции PostgreSQL из скрипта Python.
Для текущей версии PyGreSQL 4.0 требуется PostgreSQL 7.2 и Python 2.3 или выше.
Редактировать:
Я провел некоторое тестирование с использованием PostgreSQL 7.3 (скомпилированного из исходного кода Debian Squeeze) и вижу, что это работает хорошо. Я изменил только одно свойство в postgresql.conf, чтобы локальные соединения хорошо работали под Python:
unix_socket_directory = '/var/run/postgresql'
После этого с использованием пакета python-pygresql (версия 4.0.2):
import pg
con1 = pg.connect('postgres', None, 5440, None, None, 'postgres', None)
con1.query('SELECT version()')
version
--------------------------------------------------------------------------------
PostgreSQL 7.3.21 on i686-pc-linux-gnu, compiled by GCC gcc (Debian 4.4.5-8) 4.4
(1 row)
con1.query('SELECT width, height FROM box')
width|height
----- ------
10 |15
18 |25
(2 rows)