python-3.x - 如何使用 ODBC 将 python 与 vertica 连接?
问题描述
import sqlalchemy as sa
conn = "vertica+pyodbc://dbadmin:password@VMart"
sa.create_engine(conn, pool_size=10, max_overflow=20)
%load_ext sql
%sql vertica+pyodbc://VMart
错误
(pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
(此错误的背景位于:http ://sqlalche.me/e/rvf5 )
SQLAlchemy 格式所需的连接信息,例如:
postgresql://username:password@hostname/dbname<br> or an existing connection: dict_keys([])
第一的
import sqlalchemy as sa
import urllib
sa.create_engine('vertica+vertica_python://dbadmin:password@192.168.11.132:5433/VMart')
%load_ext sql
%sql vertica+pyodbc://VMart
第二
import sqlalchemy as sa
sa.create_engine('vertica+vertica_python://dbadmin:password@VMart')
import pyodbc
第三
conn = pyodbc.connect("DRIVER=Vertica;SERVER=192.168.11.132;DATABASE=VMart;PORT=5433;UID=dbadmin;PWD=password")
同样的错误
错误,但我已经在 windows10 中测试了 vertica odbc。连接成功
(pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') (此错误的背景位于:http:// /sqlalche.me/e/rvf5 )
SQLAlchemy 格式所需的连接信息,例如:
postgresql://username:password@hostname/dbname
或现有连接:dict_keys([])
解决方案
可能无法找到问题的根源,但以下是一些有助于建立连接的步骤:
- 您是否尝试过安装
sqlalchemy-vertica
驱动程序?具体来说,我建议使用vertica-python
. 这是在 python 中与 vertica 连接的一个驱动程序,我发现它工作得很好(稍后注意)
pip install sqlalchemy-vertica[vertica-python]
- 你进口了
vertica-python
吗?不确定这会影响代码,但它肯定有助于将其作为问题删除。如果您还没有安装它:
pip install vertica-python
编辑:事实上,如果你只需要读取数据,这个包对我来说效果很好。以下是目前为我工作的示例代码:
import vertica_python
conn_info = {
'host': 'host-ip',
'port': port,
'user': 'usr',
'password':password,
'database': 'db',
# autogenerated session label by default,
'session_label': 'current_session',
# default throw error on invalid UTF-8 results
'unicode_error': 'strict',
# SSL is disabled by default
'ssl': False,
# using server-side prepared statements is disabled by default
'use_prepared_statements': False,
# connection timeout is not enabled by default
# 'connection_timeout': 1
}
vertica_python.connect(**conn_info)
- 建立联系。我建议您连接的第一条线路:
sa.create_engine('vertica+vertica_python://dbadmin:password@192.168.11.132:5433/VMart')
使用 Pandas 的注意事项:
- 我在
str
使用pandas.to_sql
. 如果这是您的情况,只需确保为这些列显式传递类型(由于某种原因VARCHAR
它会强制)。此问题TEXT
中的此功能可能会帮助您:
def updateType(df_para):
dtypedict = {} # create and empty dictionary
for i,j in zip(df_para.columns, df_para.dtypes):
if "object" in str(j):
dtypedict.update({i: sa.types.VARCHAR})
return dtypedict
updatedict = updateType(df)
- 使用时我会收到一个奇怪的错误
to_sql
:
NotImplementedError:executemany 仅针对简单的 INSERT 语句实现。
没有找到合适的解决方案,但尝试使用chunksize
参数对其进行修复,并且似乎有效。
推荐阅读
- amazon-web-services - 多个 AWS 账户承担 IAM 角色以访问 API 网关
- python - Python 脚本未在 docker 容器内执行
- google-bigquery - Bigquery 到 Avro
- c# - 如何将文本框的数据保存到列表框中的选定项?
- flutter - 监听颤振的可变变化
- c# - 在第二次迭代中,内部 foreach 循环不会从第二个元素继续
- postgresql - 将列数据拆分为两列并将其插入到 postgresql 中的现有表中
- php - 当在 laravel 中使用 ajax 从下拉列表中选择产品时,如何创建显示产品价格的标签
- python - 从另一个文本文件提供 SFTP 服务器凭据
- python - 有没有一种方法可以从 python 中的多个文本文件中提取多条数据并将其保存为新的 .csv 文件中的一行?