Как я могу написать запрос на удаление postgresql в Python flask - PullRequest
0 голосов
/ 27 марта 2020

Я пытался удалить из таблицы базы данных, используя flask и postgresql, но у меня все еще есть ошибка в синтаксисе mysql. Пожалуйста, как я могу это реализовать. Два способа ниже не сработали. Nb: идентификатор должен быть получен из переменной. Я на самом деле новичок в python с php.

my_id = 3
del = engine.execute("DELETE FROM my_table WHERE id = '{my_id}'")
del = engine.execute("DELETE FROM my_table WHERE id=:id", {"id":my_id})

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Вы можете просто сделать это:

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, не содержит строк, поэтому нет смысла присваивать результат переменной.

0 голосов
/ 27 марта 2020

Существует несколько способов создания строк в python, если вы используете python3, тогда я бы использовал f-строки, которые почти использует ваша вторая строка кода. Вам просто нужно добавить «f» перед кавычками, чтобы ваш код стал:

del = engine.execute(f"DELETE FROM my_table WHERE id = '{my_id}'")

Вот некоторая информация о форматировании строк в python и использовании f-строк https://realpython.com/python-f-strings/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...