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)')
L'uso di 'DSN' ha lo stesso * Nome di origine dati non trovato ... * errore. Usare 'DRIVER' funziona :) – Kermit
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
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