Redshift / SQLAlchemy:25P02错误/所有查询警告

时间:2019-01-07 18:05:50

标签: python sqlalchemy amazon-redshift

我正在通过ODBC连接使用SQLAlchemy查询Redshift。无论我做什么,都会收到以下警告:

  

C:\ Anaconda3 \ lib \ site-packages \ sqlalchemy \ engine \ default.py:324:   SAWarning:尝试检测unicode的异常返回:   ProgrammingError(“(pyodbc.ProgrammingError)('25P02','[25P02]   [Amazon] [Amazon Redshift](30)尝试执行时发生错误   查询:[SQLState 25P02]错误:当前事务中止,   忽略命令,直到事务处理块结束\ n(30)   (SQLExecDirectW)')“)”检测Unicode返回:%r“%de)

这不是错误,只是警告。我仍然得到正确的结果。例如,像这样的简单查询:

from sqlalchemy import create_engine

engine = create_engine("mssql+pyodbc://@MY_CONN")
with engine.connect() as conn:
    ct = conn.execute("SELECT COUNT(1) FROM my_table").scalar()
print(ct)

将产生正确的计数,但仍显示该警告。我已经进行了一些研究,表明这可能与自动提交选项有关,但是当我运行以下代码时,我仍然收到警告,并且这次的错误结果为0:

ct = (
    conn.execute(text("SELECT COUNT(1) FROM my_table").execution_options(autocommit=True)).scalar()
)

此外,我认为自动提交与读取查询无关。

对此有何见解?

1 个答案:

答案 0 :(得分:1)

根据我的评论,此错误的可能原因是“ mssql + pyodbc”的使用。该方言适用于Microsoft SQL Server,因此可能在后台进行不兼容的元数据查询,从而引起警告。

要使用Redshift,请尝试使用PostgreSQL方言或Redshift方言(例如https://github.com/sqlalchemy-redshift/sqlalchemy-redshift)。