Вы можете просто сделать это:
my_id = 3
result = engine.execute("DELETE FROM my_table WHERE id = %s", my_id)
или
result = engine.execute("DELETE FROM my_table WHERE id = %(id)s", id=my_id)
В обоих этих утверждениях вы предполагаете, что базовая библиотека подключений к базе данных (например, psycopg2 или pg8000) использование% -форматирования для привязки параметров запроса. Чтобы избежать этой зависимости, вы можете использовать sqlalchemy.text для построения строки запроса:
import sqlalchemy as sa
result = engine.execute(sa.text("DELETE FROM my_table WHERE id = :id"), id=my_id)
, позволяя sqlalchemy строить запрос и обрабатывать привязку и цитирование параметров.
You НЕ следует использовать обычные python функции форматирования строки для привязки параметров запроса:
engine.execute("DELETE FROM my_table WHERE id = %s" % my_id)
engine.execute("DELETE FROM my_table WHERE id = {}".format(my_id))
engine.execute(f"DELETE FROM my_table WHERE id = {my_id}")
Использование этих методов может подвергнуть ваше приложение атакам SQL инъекций, поскольку параметры запроса могут не быть правильно процитированным.
Наконец, точка стиля: вы не можете использовать del
в качестве имени переменной. Python уже содержит оператор del , и попытка переназначения имени del
приводит к SyntaxError
. Кроме того, объект ResultProxy
, возвращаемый оператором DELETE, не содержит строк, поэтому нет смысла присваивать результат переменной.