def delete_tables(tab_name, attr, value):
c.execute("delete from " + tab_name + "where " + attr + " = " + value)
Я думаю, что-то подобное сработает, проблема в том, что вы пытаетесь изменить атрибут, но его имя всегда attribute
, для этого вы хотели бы сделать его параметром для правильной обработки .
Надеюсь, это помогло.
Редактировать:
Проверить это SQLite python
Что за c .execute «Выполнить» означает «выполнить» запрос SQL, поэтому вы можете создать что-то вроде c.execute("select * from clients")
, если у вас есть таблица clients
.
execute
делает запрос и выводит набор результатов ( если это так), поэтому, если вы хотите удалить из таблицы, используя обычный запрос SQL, вы наберете в консоли delete from clients where client_id = 12
, и этот оператор удалит клиента с идентификатором, равным 12.
Теперь, если вы используете SQLite в python, вы будете делать
c.execute("delete from clients where client_id = 12")
, но, как вы sh, это будет для любой таблицы и любого поля (атрибута) оно превращается в имя таблицы, имя поля и значение этого поля являются переменными.
tableName = "clients"
field = "client_id"
value = "12" #must be string because you would have to cast it from int in the execute
"""
if value is a varchar you must write
value = "'12'" because the '' are needed.
"""
c.execute("delete from " + tableName + " where " + field + " = " + value)
и в верхней части этого, если вы хотите, чтобы это была функция
def delete_tables(tableName, field, value):
c.execute("delete from " + tableName+ "where " + field + " = " + value)
Редактировать 2:
комментарий Аарона - это правда, это небезопасно, следующий шаг, который вы бы сделали, это
def delete_tables(tab_name, attr, value):
#no ':value' (it limits the value to characters)
c.execute("delete from :tab_name where :attr = :value",
{'tab_name': tab_name, 'attr': attr, 'value':value})
Это от Ватсала ответа