2014-06-04 27 views
6

Ho letto il iODBC documentation in merito allo odbc.ini e allo Vertica documentation. Ho anche visto una domanda with the same error, ma non riesco a far funzionare la stringa di connessione come suggerito nella risposta della domanda precedente.come connettersi a vertica utilizzando pyodbc

Quello che ho attualmente:

/etc/odbcinst.ini

[HPVertica] 
Description = HP Vertica ODBC Driver 
Driver = /opt/vertica/lib64/libverticaodbc.so

/etc/odbc.ini

[ODBC Data Sources] 
VerticaDB1 = db1 database on HP Vertica 

[VerticaDB1] 
Description = db1 database on HP Vertica 
Driver = HPVertica 
Database = db1 
Servername = 10.0.0.67 
UID = dbadmin 
PWD = 
Port = 5433 
Locale = en_GB 

[ODBC] 
Threading = 1

~/.odbc.ini

[DEFAULT] 

Driver = VerticaDB1

Test con isql

[[email protected] /]# echo "select 1;" | isql -v VerticaDB1 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> select 1; 
+---------------------+ 
| ?column?   | 
+---------------------+ 
| 1     | 
+---------------------+ 
SQLRowCount returns 1 
1 rows fetched

odbcinst -j uscite:

unixODBC 2.2.14 
DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources 
USER DATA SOURCES..: /root/.odbc.ini 
SQLULEN Size.......: 8 
SQLLEN Size........: 8 
SQLSETPOSIROW Size.: 8

In Python utilizzando "VerticaDB1":

>>> import pyodbc 
>>> conn = pyodbc.connect("DRIVER={VerticaDB1};UID={dbadmin};PWD={...}") 
Traceback (most recent call last): 
    File "", line 1, in 
pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not 
found, and no default driver specified (0) (SQLDriverConnect)')

In Python utilizzando "HPVertica":

>>> import pyodbc 
>>> conn = pyodbc.connect("DRIVER={HPVertica};UID={dbadmin};PWD={...}") 
Traceback (most recent call last): 
    File "", line 1, in 
pyodbc.Error: ('HY000', '[HY000] [unixODBC][Vertica][ODBC] (10430) Not enough 
information provided to establish a connection to the data source and specified 
to not prompt for more information. (10430) (SQLDriverConnect)')

risposta

10

Prova il collegamento tramite DSN:

conn = pyodbc.connect("DSN=VerticaDB1;UID=dbadmin;PWD=mypassword") 

In alternativa, è possibile connettersi tramite DRIVER, ma è necessario fornire ulteriori informazioni, come il quale database, padrone di casa, e porta:

conn = pyodbc.connect("DRIVER=HPVertica;SERVER=10.0.0.67;DATABASE=db1;PORT=5433;UID=dbadmin;PWD=mypassword") 
+0

L'uso di 'DSN' ha lo stesso * Nome di origine dati non trovato ... * errore. Usare 'DRIVER' funziona :) – Kermit

+2

Su una nota a margine, pyodbc accetta kwargs oltre che una stringa. per esempio. al posto del primo esempio, è possibile digitare: 'conn = pyodbc.connect (DSN =" VerticaDB1 ", UID =" dbadmin ", PWD =" mypassword ")'. Trovo questo più leggibile, ma i 2 sono esattamente equivalenti. – Guillaume

+0

Questo post fa riferimento ad alcuni [comuni odbc/vertica messaggi di errore e cause principali] (http://thisdwhguy.com/2014/04/29/vertica-odbc-error-messages-and-solutions), potrebbe aiutare come trovo strano che usare 'DRIVER' non funzioni. – Guillaume