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
该语句将删除 id 等于 12 的客户端。
现在,如果你在 python 中使用 SQLite,你会做
c.execute("delete from clients where client_id = 12")
但正如您希望它适用于任何表和任何字段(属性),它会输入表名、字段名和该字段的值作为变量。
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})
这是来自Vatsal的回答