Как исправить sqlalchemy.exc.ObjectNotExecutableError: Not an executable object

Проблема:

При попытке выполнить запрос с использованием SQLAlchemy вы видите следующее сообщение об ошибке:

error_trace.txt
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/base.py", line 1414, in execute
    meth = statement._execute_on_connection
AttributeError: 'str' object has no attribute '_execute_on_connection'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/uli/dev/MyProject/SQLIO.py", line 76, in make_sql_connection_and_wait_for_server
    sql.execute("SELECT 1")
  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/base.py", line 1416, in execute
    raise exc.ObjectNotExecutableError(statement) from err
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: 'SELECT 1'

Решение

Эта проблема возникает, потому что вы используете код, написанный для SQLAlchemy 1.x, но у вас установлен SQLAlchemy 2.x. К счастью, это довольно легко исправить:

Вместо написания

sqlalchemy_execute_bad.py
sql.execute("SELECT 1")

вам нужно обернуть выражение в text():

sqlalchemy_execute_fixed.py
from sqlalchemy.sql import text

# ...
sql.execute(text("SELECT 1"))

Помните, что вам нужно сделать это для каждого оператора execute().

После этого ошибка исчезнет.


Check out similar posts by category: Python Базы данных