【问题标题】:(psycopg2.OperationalError) Invalid - opcode(psycopg2.OperationalError) 无效 - 操作码
【发布时间】:2018-07-27 19:53:52
【问题描述】:

我正在尝试使用 SQLalchemy.create_engine() 连接到 Netezza。我想使用 SQLAlchmey 的原因是因为我希望能够通过 pandas 数据框进行读写。

工作原理如下:

import pandas as pd
import pyodbc
conn = pyodbc.connect('DSN=NZDWW')
df2 = pd.read_sql(Query,conn)

以上代码运行良好。但是为了将df数据帧写入Netezza,我需要使用函数to_sql(),它需要SQLAlchemy。这是我的代码的样子:

from sqlalchemy import create_engine
username = os.getenv('REDSHIFT_USER')
password = os.getenv('REDSHIFT_PASS')
DATABASE = "SHP_TARGET"
HOST = "Netezza1"
PORT = 5480
conn_str = "postgresql://"+username+":"+password+"@"+HOST+':'+str(PORT)+'/'+DATABASE
engine3 = create_engine(conn_str)
df = pd.read_sql(Query, engine3)

执行此操作时,出现以下错误:

OperationalError: (psycopg2.OperationalError) Invalid - opcode
Invalid - opcodeInvalid packet length (Background on this error at: http://sqlalche.me/e/e3q8)

任何线索将不胜感激。谢谢。

数据库:Netezza Python版本:3.6 操作系统:Windows

【问题讨论】:

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


    【解决方案1】:

    Postges 的sqlalchemy 方言与 Netezza 不兼容。

    您收到的错误是 psycopg2 模块,它促进了连接,抱怨它无法理解服务器“说”什么,基本上。

    虽然有appears to be a dialect for Netezza。您可能想尝试一下。

    【讨论】:

      【解决方案2】:

      这是 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-15
        • 1970-01-01
        • 1970-01-01
        • 2022-07-28
        • 2016-05-19
        • 2017-09-25
        • 1970-01-01
        相关资源
        最近更新 更多