Подключение pyodbc к Postgres
попытка подключения к Postgres с помощью pyodbc.
Я могу подключиться к БД с помощью isql:
echo "select 1" | isql -v my-connector
возвращает:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select 1
+------------+
| ?column? |
+------------+
| 1 |
+------------+
SQLRowCount returns 1
1 rows fetched
но когда я пытаюсь подключиться к pyodbc:
import pyodbc
con = pyodbc.connect("DRIVER={PostgreSQL Unicode}; DATABASE=<dbname>; UID=<username>; PWD=<password>; SERVER=localhost; PORT=5432;")
Я получаю следующую ошибку:
pyodbc.Error: ('08001', '[08001] [unixODBC]connction string lacks some options (202) (SQLDriverConnect)')
obdc.ini-файл выглядит так:
[my-connector]
Description = PostgreSQL connection to '<dbname>' database
Driver = PostgreSQL Unicode
Database = <dbname>
Servername = localhost
UserName = <username>
Password = <password>
Port = 5432
Protocol = 9.3
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =
odbcinst.ini-файл выглядит так:
[PostgreSQL ANSI]
Description = PostgreSQL ODBC driver (ANSI version)
Driver = psqlodbca.so
Setup = libodbcpsqlS.so
Debug = 0
CommLog = 1
UsageCount = 1
[PostgreSQL Unicode]
Description = PostgreSQL ODBC driver (Unicode version)
Driver = psqlodbcw.so
Setup = libodbcpsqlS.so
Debug = 0
CommLog = 1
UsageCount = 1
Примечания:
- Ubuntu 14.04
- Python 3
- Postgresql 9.3
я использовал psycopg2 в прошлом для подключения к Postgres, однако моя текущая компания использует Netezza, Postgres и MySQL. Я хочу написать 1 модуль подключения и использовать разные драйверы для подключения к различным базам данных. Любая помощь будет очень признательна.
-- спасибо
1 ответов
поскольку у вас уже есть рабочий DSN, определенный в odbc.Ини вы можете просто использовать это:
con = pyodbc.connect("DSN=my-connector")
кроме того, для записи, что дополнительные пробелы в вашей строке подключения, возможно, запутывали проблему, потому что это отлично работало для меня, по крайней мере, под Python 2.7
import pyodbc
conn_str = (
"DRIVER={PostgreSQL Unicode};"
"DATABASE=postgres;"
"UID=postgres;"
"PWD=whatever;"
"SERVER=localhost;"
"PORT=5432;"
)
conn = pyodbc.connect(conn_str)
crsr = conn.execute("SELECT 123 AS n")
row = crsr.fetchone()
print(row)
crsr.close()
conn.close()