/ / Podłącz pyodbc do PostgreSzu - postgresql, python-3.x, ubuntu-14.04, pyodbc

Podłącz pyodbc do PostgreSzu - postgresql, python-3.x, ubuntu-14.04, pyodbc

Próbuję połączyć się z Postgresem za pomocą pyodbc.

Mogę połączyć się z bazą danych za pomocą isql:

echo "select 1" | isql -v my-connector

Zwroty:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+------------+
| ?column?   |
+------------+
| 1          |
+------------+
SQLRowCount returns 1
1 rows fetched

Ale kiedy próbuję połączyć się z pyodbc:

import pyodbc
con = pyodbc.connect("DRIVER={PostgreSQL Unicode}; DATABASE=<dbname>;     UID=<username>; PWD=<password>; SERVER=localhost; PORT=5432;")

Pojawia się następujący błąd:

pyodbc.Error: ("08001", "[08001] [unixODBC]connction string lacks some options (202) (SQLDriverConnect)")

Plik obdc.ini wygląda następująco:

[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        =

plik odbcinst.ini wygląda następująco:

[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

Uwagi:

  • Ubuntu 14.04
  • Python 3
  • Postgresql 9.3

Użyłem psycopg2 w przeszłości do połączenia sięPostgres, jednak moja obecna firma używa Netezza, Postgres i MySQL. Chcę napisać 1 moduł połączenia i używać różnych sterowników do łączenia się z różnymi bazami danych. Każda pomoc będzie bardzo ceniona.

-- Dzięki

Odpowiedzi:

5 dla odpowiedzi № 1

Ponieważ masz już działającą sieć DSN zdefiniowaną w odbc.ini, możesz po prostu użyć:

con = pyodbc.connect("DSN=my-connector")

Ponadto, dla rekordu, że dodatkowe spacje w łańcuchu połączenia mogły wprowadzać zamieszanie, ponieważ działało to dobrze dla mnie, w Pythonie 2.7 co najmniej

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