我正在通过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()
)
此外,我认为自动提交与读取查询无关。
对此有何见解?
答案 0 :(得分:1)
根据我的评论,此错误的可能原因是“ mssql + pyodbc”的使用。该方言适用于Microsoft SQL Server,因此可能在后台进行不兼容的元数据查询,从而引起警告。
要使用Redshift,请尝试使用PostgreSQL方言或Redshift方言(例如https://github.com/sqlalchemy-redshift/sqlalchemy-redshift)。