kan3k1k3n
@kan3k1k3n

Как удалить строку из базы данных postgresql с помощью запроса на пайтон?

у меня есть бот, который успешно добавляет данные (название товара, цену, картинку) на мой сайт.
хочу сделать функцию, чтобы можно было удалить последний добавленный товар.
код этой функции:
@bot.message_handler(commands=['delete'])
def delete_tovar(message):
    deleted_image = file_name
    conn = psycopg2.connect(dbname='test', user='postgres', password='', host='127.0.0.1')
    cursor = conn.cursor()
    cursor.execute("DELETE FROM shop WHERE image  = '{deleted_image}';")
    conn.commit()
    conn.close()
    cursor.close()

p.s переменная file_name - глобальная. работает в предыщущей функции по сохранению изображения.
как сделать, чтобы у меня удалялась строка? нажимаю, ничего не удаляется, но пайчарм не показывает ошибки.
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
Alex_Geer
@Alex_Geer
System Engineer
Попробуйте заменить строку c
ursor.execute("DELETE FROM shop WHERE image  = '{deleted_image}';")
на
cursor.execute(f"DELETE FROM shop WHERE image  = '{deleted_image}';")


Но этот способ не безопасен, так как открывает уязвимость манипулирования данными таблицы через имя файла! Лучше использовать ответ от Василий Банников
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Вполне логично, что у тебя нет значения '{deleted_image}' в этой таблице :)

Попробуй так:
cursor.execute("DELETE FROM shop WHERE image  = %s;", (deleted_image, ))


p.s переменная file_name - глобальная

А вот этим лучше прекращай заниматься
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы