(psycopg2.OperationalError)无效-操作码

时间:2018-07-27 19:53:53

标签: python python-3.x postgresql psycopg2 netezza

我正在尝试使用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

2 个答案:

答案 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)