我有一个像这样的简单数据框
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
请问您如何解决此问题的建议?非常感谢。
答案 0 :(得分:1)
我遇到了一个类似的问题,连接到Vertica
并设法通过以下方式建立了连接:
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的改进,通过传递以下内容,使用pandas
和sqlalchemy
的上传可以变得更快配置为create_engine
:
engine = create_engine(sqlalchemy_url, fast_executemany=True)
我还没有尝试过,但是看起来很有希望。关于该答案的更多信息。
编辑
我尝试了上面的fast_executemany
标志,很遗憾,它不适用于Vertica
。