Redshift / SQLAlchemy: ошибка 25P02 / предупреждение для всех запросов - PullRequest
0 голосов
/ 07 января 2019

Я запрашиваю Redshift с помощью SQLAlchemy через соединение ODBC. Независимо от того, что я делаю, я получаю следующее предупреждение:

C: \ Anaconda3 \ Lib \ сайт-пакеты \ SQLAlchemy \ двигатель \ default.py: 324: SAWarning: Исключительная ситуация при попытке обнаружить возвраты Unicode: ProgrammingError ("(pyodbc.ProgrammingError) ('25P02', '[25P02] [Amazon] [Amazon Redshift] (30) Произошла ошибка при попытке выполнить запрос: [SQLState 25P02] ОШИБКА: текущая транзакция прервана, команды игнорируются до конца блока транзакции \ n (30) (SQLExecDirectW) ') ")" обнаруживает юникод-возврат:% 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()
)

Кроме того, я думаю, что autocommit не имеет ничего общего с запросами на чтение.

Есть какие-нибудь идеи по этому поводу?

1 Ответ

0 голосов
/ 08 января 2019

Согласно моему комментарию, вероятно, причиной этой ошибки является использование "mssql + pyodbc". Этот диалект предназначен для Microsoft SQL Server и, вероятно, делает в фоновом режиме несовместимые запросы метаданных, вызывая предупреждение.

Чтобы работать с Redshift, попробуйте использовать диалект PostgreSQL или диалект Redshift (например, https://github.com/sqlalchemy-redshift/sqlalchemy-redshift).

...