使用熊猫to_sql和pyhive替换表时执行失败-DatabaseError:“ ...并非在格式化字符串时转换了所有参数”

Shreye Saxena

我需要用新的pandas数据框替换Hive中的表。我正在使用pyhive创建连接引擎,随后使用带有'if_exists'作为替换的pandas.to_sql。

from pyhive import hive

my_data = pd.read_csv('my_data.csv')

conn = hive.Connection(host="111.11.11.11", port=10000, username="abcd")

my_data.to_sql(name='table_name', con=conn, if_exists='replace', schema='my_schema')

conn.close()

但是,这将导致意外错误,如下所示:

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

其他答案似乎表明这与期望使用SqlAlchemy引擎的to_sql有关-我的印象是pyhive用来创建连接。任何有关如何适当执行此命令的指导将不胜感激。

值得注意的是,在其他地方,该相同的连接从Hive读取数据没有问题。

按预期工作:

conn = hive.Connection(host="111.11.11.11", port=10000, username="abcd")

my_data = pd.read_sql('select * from my_table', conn)

conn.close()
戈德·汤普森

其他答案似乎表明这与期望使用SqlAlchemy引擎的to_sql有关-我的印象是pyhive用来创建连接。

PyHive可以创建一个SQLAlchemyEngine对象,但不能创建您的方法。PyHive文档所示,您需要执行以下操作

engine = create_engine('hive://localhost:10000/default')

然后将engine对象传递to_sql

[read_sql]正常工作

read_sql通常只能与DBAPI连接一起使用,但是to_sql需要SQLAlchemy ConnectableEngineConnection),因为它可能需要生成DDL。有关更多信息,请参见此答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档