如何使用pyodbc连接到Vertica

7
我已阅读有关odbc.ini的iODBC文档,和Vertica文档。我也看到了一个问题与同样的错误,但无法使连接字符串能够按照前一个问题的答案工作。 我当前拥有的: /etc/odbcinst.ini
[HPVertica]
描述 = HP Vertica ODBC驱动程序
驱动程序 = /opt/vertica/lib64/libverticaodbc.so
/etc/odbc.ini
[ODBC数据源]
VerticaDB1 = HP Vertica上的db1数据库
[VerticaDB1] 描述 = HP Vertica上的db1数据库 Driver = HPVertica Database = db1 Servername = 10.0.0.67 UID = dbadmin PWD = Port = 5433 Locale = en_GB
[ODBC] 线程 = 1
~/.odbc.ini
[默认]
Driver = VerticaDB1
使用isql测试:
[root@ip-10-0-0-67 /]# echo "select 1;" | isql -v VerticaDB1
+---------------------------------------+
| 已连接!                               |
|                                       |
| SQL语句                              |
| 帮助 [表名]                           |
| 退出                                  |
|                                       |
+---------------------------------------+
SQL> select 1;
+---------------------+
| ?column?            |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount返回1
检索到1行记录
odbcinst -j输出:
unixODBC 2.2.14
驱动程序............: /etc/odbcinst.ini
系统数据源: /etc/odbc.ini
文件数据源..: /etc/ODBCDataSources
用户数据源..: /root/.odbc.ini
SQLULEN大小.......: 8
SQLLEN大小........: 8
SQLSETPOSIROW 大小.: 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) 未提供足够的信息以建立到数据源的连接,同时指定不提示更多信息。 (10430) (SQLDriverConnect)')
以上是IT技术相关内容,使用Python编程语言通过pyodbc模块连接数据库时出现错误。如果你想在Python中使用"HPVertica"连接数据库,需要将DRIVER参数改为"HPVertica",但执行后依然报错,显示未提供足够的信息以建立到数据源的连接。
1个回答

12

尝试使用 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")

使用 DSN 会导致相同的错误 找不到数据源名称... 使用 DRIVER 就可以了 :) - Kermit
3
顺便提一下,pyodbc除了使用字符串外,也可以接受kwargs参数。例如,你可以输入以下代码来代替第一个示例:conn = pyodbc.connect(DSN="VerticaDB1", UID="dbadmin", PWD="mypassword")。我认为这种方式更易读,但这两种方式是完全等价的。 - Guillaume
本文涉及一些常见的ODBC/Vertica错误消息和根本原因,它可能会有所帮助,因为我发现使用“DRIVER”不起作用很奇怪。 - Guillaume
@Guillaume,很遗憾,链接已经失效了。 - alecxe
2
@alecxe 我无法更新旧评论,但这是实时链接:https://thisdataguy.com/2014/04/29/vertica-odbc-error-messages-and-solutions/ - Guillaume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接