Я пытаюсь удалить запись из моей таблицы базы данных, не используя идентификатор, но используя имя, которое находится в строке

Я использую SQLite3,

Я пытаюсь удалить запись из моей таблицы базы данных, не используя идентификатор, но используя имя, которое находится в строке.

Вот КОД:

import sqlite3

def delete_data(product_name):
    i_Delete = input(f"You Want To Delete {product_name} ?. (y/n) ")
    
    if i_Delete == 'y':
        # Connect to database
        connect_to_database = sqlite3.connect('database.db')

        # create a cursor
        c = connect_to_database.cursor()
        

        # delete record.
        c.execute("DELETE from data WHERE produit = product_name")

        # commit the command.
        connect_to_database.commit()

        # close the DB
        connect_to_database.close()
        
    elif i_Delete == 'n':
        pass
    else:
        print("Sorry Bad Input. \nPlease Verify Your Input")
        
delete_data('Cheeseburger')

Затем я получаю эту ошибку вместо того, чтобы удалить ее.

You Want To Delete Cheeseburger ?. (y/n) y

Traceback (most recent call last):
  File "deleteDB.py", line 29, in <module>
    delete_data('Cheeseburger')
  File "deleteDB.py", line 16, in delete_data
    c.execute("DELETE from data WHERE produit = product_name")
sqlite3.OperationalError: no such column: product_name

Как я вижу, проблема здесь, на product = product_name

# delete record.
c.execute("DELETE from data WHERE product = product_name")

Итак, что я могу сделать, пожалуйста, помогите!

Вам не хватает кавычек, если product_name должен быть текстовым литералом, а не именем столбца.

CBroe 15.12.2020 11:53

без использования id, но с использованием имени" - почему? Это, кажется, имеет довольно мало смысла для начала.

CBroe 15.12.2020 11:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В своем коде вы используете имя искомой переменной (вместо ее значения).

Вам нужно предоставить параметр оператору execute:

c.execute("DELETE from data WHERE produit = ?", [product_name])

Обратите внимание, что вы должны предоставить список с параметрами, поэтому [product_name] вместо product_name.

Другой вариант - использовать словарь:

c.execute("DELETE from data WHERE produit = :product_name", {'product_name': product_name})

Теперь ошибка переходит к следующему: Файл «deleteDB.py», строка 16, в delete_data c.execute («УДАЛИТЬ из данных, ГДЕ produit = %», [product_name]) sqlite3.OperationalError: рядом с «%»: синтаксическая ошибка

Thierry Mugisha 15.12.2020 12:51

@red_ant: исправлено. Похоже, что API Python поддерживает ? вместо %, как предполагают ответы на эти вопросы

sophros 15.12.2020 13:00

Спасибо, пользуюсь? вместо % теперь работает Спасибо.

Thierry Mugisha 15.12.2020 13:03

Другие вопросы по теме