【发布时间】:2019-09-17 13:37:28
【问题描述】:
我在 python 中有一个 pandas DataFrame,并希望将此 DataFrame 直接写入 Netezza 数据库。
我想使用here 中描述的pandas.to_sql() 方法,但似乎此方法需要使用SQLAlchemy 连接到数据库。
问题:SQLAlchemy 不支持 Netezza。
我目前用来连接数据库的是pyodbc。但另一方面,pandas.to_sql() 不理解这一点,还是我错了?
我的解决方法是通过 pandas.to_csv() 将 DataFrame 写入 csv 文件,然后通过 pyodbc 将其发送到 Netezza 数据库。
因为我有大数据,所以先写 csv 是一个性能问题。我实际上不在乎是否必须使用 SQLAlchemy 或 pyodbc 或其他东西,但我无法改变我拥有 Netezza 数据库的事实。
我知道道义论项目,但正如作者所说,它“远未完成,有很多错误”。 我得到了这个包的工作(见下面我的解决方案)。但如果有人现在有更好的解决方案,请告诉我!
我想通了。对于我的解决方案,请参阅接受的答案。
【问题讨论】:
-
您是否尝试使用方言来查看它是否适用于您的特定情况?当我接手 sqlalchemy-access 方言时,我做的第一件事就是让 pandas
to_sql工作。 -
查看
pyodbc.drivers()返回的列表,了解您的 Python 应用程序可以使用哪些驱动程序。您在该列表中看到 Netezza 驱动程序了吗? -
是的。 “NetezzaSQL”在列表中。我摆脱了
pyodbc.InterfaceError。该错误提示我在 Windows ODBC 数据源管理员工具中添加数据源并使用它,而不是尝试“手动”输入服务器地址。然后它得到驱动程序。我不知道这是否是正常行为,因为在 pyodbc 中没有必要这样做。所以我使用engine = create_engine(netezza://ODBCDataSourceName)而不是engine = create_engine(netezza://usr:pass@address:port/database_name)它仍然不起作用。我会尽快更新我的问题。 -
感谢您的努力,戈德!我找到了解决方案。编辑了我的问题以包含它。
-
感谢您抽出宝贵时间跟进。这里的人们发布他们的解决方案作为他们自己问题的答案是很常见的。这使其他人更容易受益,如果您接受自己的答案,则可以将问题标记为“已解决”。
标签: python pandas sqlalchemy pyodbc netezza