我正在尝试使用SQLalchemy.create_engine()连接到Netezza。我想使用SQLAlchmey的原因是因为我希望能够读取和写入pandas数据框。
工作原理如下:
WSO2
以上代码运行正常。但是为了将“ df2”数据帧写入Netezza,我需要使用函数to_sql(),该函数需要SQLAlchemy。这是我的代码的样子:
import pandas as pd
import pyodbc
conn = pyodbc.connect('DSN=NZDWW')
df2 = pd.read_sql(Query,conn)
执行此操作时,出现以下错误: OperationalError:(psycopg2.OperationalError)无效-操作码 无效-opcode数据包长度无效(此错误的背景位于:http://sqlalche.me/e/e3q8)
任何潜在客户将不胜感激。谢谢。
数据库:Netezza Python版本:3.6 操作系统:Windows
答案 0 :(得分:0)
用于Postges的sqlalchemy
方言与Netezza不兼容。
您收到的错误是psycopg2
模块,它简化了连接,并抱怨说基本上它无法理解服务器在说什么。
尽管有appears to be a dialect for Netezza。您可能想尝试一下。
答案 1 :(得分:0)
这是Netezza的正式方言已经发布。
它可以如此处记录的那样使用-https://github.com/IBM/nzalchemy#prerequisites
示例
from sqlalchemy import create_engine
from urllib import parse_quote_plus
# assumes NZ_HOST, NZ_USER, NZ_PASSWORD are set
import os
params = parse_quote_plus(f"DRIVER=NetezzaSQL;SERVER={os['NZ_HOST']};"
f"DATABASE={os['NZ_DATABASE']};USER={os['NZ_USER'};"
f"PASSWORD={os['NZ_PASSWORD']}")
engine = create_engine(f"netezza+pyodbc:///?odbc_connect={params}",
echo=True)