gpt4 book ai didi

python-3.x - 如何使用 ODBC 连接 python 和 vertica?

转载 作者:行者123 更新时间:2023-12-04 01:48:33 27 4
gpt4 key购买 nike

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

同样的错误

error but I already test vertica odbc in windows10. It connect successfuled

(pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)')(此错误的背景信息位于:http://sqlalche.me/e/rvf5)
需要 SQLAlchemy 格式的连接信息,例如:

postgresql://username:password@hostname/dbname
or an existing connection: dict_keys([])

最佳答案

可能无法找到问题的根源,但以下是一些有助于建立联系的步骤:

  1. 您是否尝试安装 sqlalchemy-vertica 驱动程序?具体来说,我建议使用 vertica-python 安装。这是在 python 中与 vertica 连接的一个驱动程序,我发现它工作得很好(稍后注意)
pip install sqlalchemy-vertica[vertica-python]
  1. 您是否导入了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)
  1. 建立联系。我建议您连接第一条线路:
sa.create_engine('vertica+vertica_python://dbadmin:password@192.168.11.132:5433/VMart')

使用 Pandas 的注意事项:

  1. 我在使用 pandas.to_sqlstr 变量发送到数据库时遇到了问题。如果是这种情况,只需确保将这些列的类型显式传递为 VARCHAR(出于某种原因,它将强制为 TEXT)。此函数来自 this question可能对您有帮助:
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)
  1. 在使用 to_sql 时我会收到一个奇怪的错误:

NotImplementedError: executemany is implemented for simple INSERT statements only.

没有找到合适的解决方案,但尝试使用 chunksize 参数进行补救,它似乎奏效了。

关于python-3.x - 如何使用 ODBC 连接 python 和 vertica?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com