DatabaseError:使用to_sql和vertica_python将熊猫数据帧写入vertica

时间:2019-01-28 05:12:32

标签: python pandas vertica

我有一个像这样的简单数据框

df = pd.DataFrame({"A":[1, 2, 3], "B":["a", "b", "c"]})

我想使用to_sql方法将此数据帧写入vertica数据库。所以我使用vertica_python模块,我的代码如下

import pandas as pd
import vertica_python

cxn = {"user":'myuser',
       "password":'mypassword',
       "host":'xx.x.x.xx',
       "port":yyyy,
       "database":"mydb"}

engine = vertica_python.connect(**cxn)

df = pd.DataFrame({"A":[1, 2, 3], "B":["a", "b", "c"]})

df.to_sql("df", index=False, if_exists="replace", con=engine, schema="public", dtype={"A":"int", "B":"int"})

然后我收到数据库错误,无法按如下进行修复。

DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

请问您如何解决此问题的建议?非常感谢。

1 个答案:

答案 0 :(得分:1)

我遇到了一个类似的问题,连接到Vertica并设法通过以下方式建立了连接:

  1. 使用sqlalchemy,特别是sqlalchemy-vertica

由于您似乎正在使用vertica_python,因此建议使用以下方式进行安装:

pip install sqlalchemy-vertica[vertica-python]

通过这种方式,您可以通过以下方式进行连接:

import sqlalchemy as sa
import vertica_python

engine = sa.create_engine('vertica+vertica_python://user:pwd@host:port/database')

请注意,根据this thread,由于最近通过sqlalchemy的改进,通过传递以下内容,使用pandassqlalchemy的上传可以变得更快配置为create_engine

engine = create_engine(sqlalchemy_url, fast_executemany=True)

我还没有尝试过,但是看起来很有希望。关于该答案的更多信息。

编辑

我尝试了上面的fast_executemany标志,很遗憾,它不适用于Vertica