使用 vertica-python 将 Python pandas 数据帧转换为 vertica 表

val*_*zio 1 python vertica pandas

我正在使用 python 与 vertica 进行通信。有没有一种优雅的方法来使用 pandas 数据框创建新的 vertica 表。我正在使用vertica-python 0.6.14。我知道的唯一方法是使用 for 循环将数据帧的每一行写入 vertica。此外,在 vertica 中创建表非常痛苦,因为您需要知道每列的数据类型。我想知道在提交 for 循环之前是否有一个简单的解决方案可以处理所有事情。

我尝试使用以下内容:

from sqlalchemy import create_engine
engine = create_engine('vertica+vertica_python://user:pass@host:5433/MYDB')
df.to_sql('mytable', engine)
Run Code Online (Sandbox Code Playgroud)

它创建了一个表,但没有填充它,并且我收到一条错误消息。

我还尝试通过 DSN 安装驱动程序并配置 DSN。然后我用了这一行:

engine = create_engine('vertica+pyodbc://username:password@mydsn')
Run Code Online (Sandbox Code Playgroud)

我可以与 vertica 通信,但 pandas -> vertica 仍然无法工作。有什么建议吗?

谢谢

Kli*_*lim 5

您可以使用复制语句将数据从 Pandas 数据框插入到 Vertica:

import vertica_python
conn_info = {'host': host,
             'port': port,
             'user': user,
             'password': password,
             'database': database,
             # 10 minutes timeout on queries
             'read_timeout': 600,
             # default throw error on invalid UTF-8 results
             'unicode_error': 'strict',
             # SSL is disabled by default
             'ssl': False,
             'connection_timeout': 30
             # connection timeout is not enabled by default
            }
df_csv = df.to_csv(sep=',',index=False)
cols = tuple(df.columns)
with vertica_python.connect(**conn_info) as connection:
    cur = connection.cursor('dict')
    cur.copy("""COPY yourtable {}
                from stdin DELIMITER ',' """.format(cols),
             df_csv)
Run Code Online (Sandbox Code Playgroud)