как подключиться к Vertica с помощью pyodbc

Я прочитал документацию iODBC относительно odbc.ini и < a href = "https://my.vertica.com/docs/7.0.x/HTML/index.htm#Authoring/ProgrammersGuide/InstallingDrivers/CreatingAnODBCDSNForLinuxSolarisAIXAndHP-UX.htm" rel = "nofollow" документация по noreaferrer >. Я также видел вопрос с той же ошибкой, но не может заставить строку подключения работать, как было предложено в ответе на предыдущий вопрос.

Что у меня сейчас есть:

/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

Тестирование с isql

[root@ip-10-0-0-67 /]# 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 выходы:

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

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

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

person Kermit    schedule 04.06.2014    source источник


Ответы (1)


Попробуйте подключиться с помощью DSN:

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

В качестве альтернативы вы можете подключиться с помощью DRIVER, но вам нужно предоставить дополнительную информацию, например, какая база данных, хост и порт:

conn = pyodbc.connect("DRIVER=HPVertica;SERVER=10.0.0.67;DATABASE=db1;PORT=5433;UID=dbadmin;PWD=mypassword")
person woot    schedule 04.06.2014
comment
Использование DSN приводит к той же ошибке Имя источника данных не найдено .... Использование DRIVER работает :) - person Kermit; 05.06.2014
comment
Кстати, pyodbc принимает kwargs, а также строку. например. вместо первого примера вы можете ввести: conn = pyodbc.connect(DSN="VerticaDB1", UID="dbadmin", PWD="mypassword"). Я считаю это более читаемым, но 2 в точности эквивалентны. - person Guillaume; 05.06.2014
comment
В этом сообщении упоминаются некоторые распространенные сообщения об ошибках odbc / vertica и корень причин, это может помочь, поскольку мне кажется странным, что использование DRIVER не работает. - person Guillaume; 05.06.2014
comment
@Guillaume ссылка, к сожалению, мертва. - person alecxe; 11.08.2016
comment
@alecxe Я не могу обновить старый комментарий, но вот действующая ссылка: thisdataguy.com/2014/04/29/ - person Guillaume; 12.08.2016