2014-06-04 10 views
6

Ich habe die iODBC documentation in Bezug auf die odbc.ini und die Vertica documentation gelesen. Ich sah auch eine Frage with the same error, aber kann die Verbindungszeichenfolge nicht funktionieren, wie in der Antwort der vorherigen Frage vorgeschlagen.wie verbinden mit vertica mit pyodbc

Was ich derzeit haben:

/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

Testen mit 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 Ausgänge:

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 "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 "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)')

Antwort

10

Versuchen Sie es mit DSN verbinden:

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

Alternativ können Sie verbinden DRIVER, aber Sie brauchen mehr Informationen, wie dem Datenbank-Host, und Port:

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

Verwenden der 'DSN' Ergebnisse in der gleichen * Datenquellenname nicht gefunden ... * Fehler. 'DRIVER' funktioniert :) – Kermit

+2

Nebenbei bemerkt, pyodbc akzeptiert sowohl Kwargs als auch eine Zeichenkette. z.B. Anstelle des ersten Beispiels könnten Sie Folgendes eingeben: 'conn = pyodbc.connect (DSN =" VerticaDB1 ", UID =" dbadmin ", PWD =" MeinPasswort ")'. Ich finde das besser lesbar, aber die 2 sind genau gleichwertig. – Guillaume

+0

Dieser Beitrag verweist auf einige [gemeinsame odbc/vertica Fehlermeldungen und Grundursachen] (http://thisdwhguy.com/2014/04/29/vertica-odbc-error-messages-and-solutions), könnte es helfen, wie ich finde seltsam, dass 'DRIVER' nicht funktioniert. – Guillaume