Wie man sqlalchemy.exc.ObjectNotExecutableError: Not an executable object behebt
English
Deutsch
Problem:
Beim Versuch, eine Abfrage mit SQLAlchemy auszuführen, sehen Sie die folgende Fehlermeldung:
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'Lösung
Dieses Problem tritt auf, weil Sie Code verwenden, der für SQLAlchemy 1.x geschrieben wurde, aber SQLAlchemy 2.x installiert haben. Glücklicherweise ist dies recht einfach zu beheben:
Anstatt
sqlalchemy_execute_bad.py
sql.execute("SELECT 1")zu schreiben, müssen Sie die Anweisung in text() einpacken:
sqlalchemy_execute_fixed.py
from sqlalchemy.sql import text
# ...
sql.execute(text("SELECT 1"))Denken Sie daran, dass Sie das für jede execute()-Anweisung tun müssen.
Danach wird der Fehler verschwinden.
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow