Я использую 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")
Итак, что я могу сделать, пожалуйста, помогите!
без использования id, но с использованием имени" - почему? Это, кажется, имеет довольно мало смысла для начала.
В своем коде вы используете имя искомой переменной (вместо ее значения).
Вам нужно предоставить параметр оператору 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: рядом с «%»: синтаксическая ошибка
@red_ant: исправлено. Похоже, что API Python поддерживает ?
вместо %
, как предполагают ответы на эти вопросы
Спасибо, пользуюсь? вместо % теперь работает Спасибо.
Вам не хватает кавычек, если
product_name
должен быть текстовым литералом, а не именем столбца.