【问题标题】:How to connect python with vertica using ODBC?如何使用 ODBC 将 python 与 vertica 连接?
【发布时间】:2019-08-07 09:10:51
【问题描述】:
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] 未找到数据源名称且未指定默认驱动程序 (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([])

【问题讨论】:

    标签: python-3.x sqlalchemy vertica


    【解决方案1】:

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

    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 仅针对简单的 INSERT 语句实现。

    没有找到合适的解决方案,但尝试使用chunksize 参数对其进行修复,并且似乎有效。

    【讨论】:

    • 感谢您的帮助。我之前已经尝试过,我只是重新安装了anaconda-navigator。我会错过任何图书馆吗? 1. conda update sqlalchemy 2. pip install sqlalchemy-vertica[pyodbc,vertica-python] 3. pip install pyodbc 4.pip install ipython-sql 5. pip install psycopg2 6. pip install 6 但是,它仍然是同样的错误。我试图找出它,但我不会被关闭。任何事情都可以建议我
    • 感谢您的帮助。我之前已经尝试过,我只是重新安装了anaconda-navigator。我会错过任何图书馆吗? 1. conda update sqlalchemy 2. pip install sqlalchemy-vertica[pyodbc,vertica-python] 3. pip install pyodbc 4.pip install ipython-sql 5. pip install psycopg2 6. pip install 6 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 但是,它仍然再次出现同样的错误。我试图找出它,但我不会被关闭。任何事情都可以建议我
    • 嗨@ChirametCharoennakasit 我在你的列表中没有看到vertica_python 本身here。这是一个很好的包并连接到上面提供的示例。我昨天才成功连接,它运行良好。事实上,如果你只需要读取数据,你应该只需要这个包。我编辑了答案以添加一个代码 sn-p 可以让我读取数据。
    • 它现在可以工作,但我必须以另一种方式使用它。我想使用 sqlalchemy
    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多