python - 使用 pyodbc DSN 连接将 DataFrame 写入 Hive
问题描述
如何使用 pyodc 连接将数据帧写入配置单元表。写入时会出现编程错误.. 任何其他将数据从本地写入配置单元的方式。
错误
Error Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py in execute(self, *args, **kwargs)
1430 else:
-> 1431 cur.execute(*args)
1432 return cur
Error: ('HY000', "[HY000] [Cloudera][ImpalaODBC] (110) Error while executing a query in Impala: [HY000] : ParseException: Syntax error in line 1:\n...ERE type='table' AND name=?;\n ^\nEncountered: Unexpected character\nExpected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, LEFT, NOT, NULL, REPLACE, RIGHT, TRUNCATE, TRUE, IDENTIFIER\n\nCAUSED BY: Exception: Syntax error\n (110) (SQLPrepare)")
在处理上述异常的过程中,又出现了一个异常:
DatabaseError Traceback (most recent call last) <ipython-input-8-9f82c88c3a27> in <module>
1 import pyodbc
2 with pyodbc.connect("DSN=*****", autocommit=True) as conn:
----> 3 df.to_sql(name='Xyz', con=conn, schema='fgh',if_exists='append',index=False)
解决方案
您正在将原始(DBAPI)传递pyodbc.Connection
给 pandas' to_sql
。正如to_sql 的文档所述,这样的Connection
对象被假定为 sqlite3 连接,to_sql
发送查询也是如此
SELECT name FROM sqlite_master WHERE type='table' AND name=?;
询问数据库。这不适用于 Hive(或 SQLite 以外的任何数据库)。
对于任何其他数据库,您需要将to_sql
SQLAlchemyEngine
或Connection
对象作为con=
参数传递。
推荐阅读
- spring - 春季批处理:typeMismatch.java.sql.Date,typeMismatch
- r - 应用具有多个参数和输出变量的函数
- momentjs - 使用 momentjs 获取两个日期时间值,从第一个获取日期,从第二个获取时间
- conda - JupyterLab 坏了
- javascript - 无法在节点 js 代码处访问 HTML/Javascript 代码发送的 POST 表单数据
- javascript - GitHub Action [cypress CI 集成]:如何在运行 cypress run 命令之前设置环境变量
- azure - 在 Azure ADB2C 中设置令牌生命周期
- python - Django / 模型表单
- reactjs - 如果弹出窗口打开,反应防止正文滚动
- reactjs - 将图像从 React 上传到 Django 时出错