【问题标题】:DatabaseError: Write pandas dataframe to vertica using to_sql and vertica_pythonDatabaseError:使用 to_sql 和 vertica_python 将 pandas 数据帧写入 vertica
【发布时间】:2019-01-28 05:12:31
【问题描述】:

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

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

我可以就如何解决这个问题提出您的建议吗?非常感谢。

【问题讨论】:

  • 您已将 B 列的类型指定为 int 将其转换为 objectstr

标签: python pandas vertica


【解决方案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,使用pandassqlalchemy 的上传可以变得更快,因为最近通过将以下配置传递给create_engine 对sqlalchemy 进行了改进:

engine = create_engine(sqlalchemy_url, fast_executemany=True)

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

编辑

我尝试了上面的fast_executemany 标志,不幸的是它不适用于Vertica

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 2014-07-23
    • 2018-01-01
    • 2020-10-25
    • 1970-01-01
    • 2018-05-12
    • 2015-08-18
    • 2017-05-19
    • 2018-07-28
    相关资源
    最近更新 更多