Подключение к базе данных PostgreSQL 7.3 на Python

#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)