SQLAlchemy: выполнение сырого SQL с параметрами в привязках
Я пытаюсь выполнить простой SQL-запрос с параметрами с использованием SQLAlchemy в скрипте Alembic. Вот мой код:
from alembic import op
t = {"code": "123", "description": "one two three"}
op.execute("insert into field_tags (id, field_id, code, description) " +
"values (1,'zasz', :code ,:description')", t)
И я получаю следующую ошибку:
sqlalchemy.exc.StatementError: A value is required for bind parameter
'description' (original cause: InvalidRequestError: A value is required for
bind parameter 'description') "insert into field_tags (id, field_id, code,
description) values (1, 'math',
%(code)s ,%(description)s)" []
Решение:
Чтобы исправить эту ошибку, нужно использовать text
из SQLAlchemy, и тогда код будет выглядеть так:
from sqlalchemy.sql import text
t = {"code": "123", "description": "one two three"}
op.get_bind().execute(text("insert into field_tags (id, field_id, code, description) " +
"values (1,'zasz', :code ,:description)"), **t)
Я не понимаю, в чем была проблема и почему без text
не удалось передать параметры. Подскажите, что именно я делал не так и почему это решение работает?
SQLAlchemy: Как использовать ORDER BY по убыванию?
SQLAlchemy: В чем разница между flush() и commit()?
Как создать подзапрос в SQLAlchemy?
Почему возникает ошибка вложенной откатки в SQLAlchemy?
Создание и чтение временного файла