在SQL表中搜索并删除行(如果单元格已存在)

2024-06-18 13:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用sqllite和Python的表。表的大小总是有3列,并且可以有许多行。每个单元格都是字符串。以下是示例表:

serial_num   date_measured  status
1234A        1-1-2015       passed
4321B        6-21-2015      failed
1423C        12-25-2015     passed

。。。。。。在

我的程序提示我输入序列号。它保存为一个名为serialNum的变量。如果serialNum等于表中serial_num列中的任何字符串,如何删除(或覆盖)整行?在

我见过很多关于如何删除(或覆盖)表中的一行的例子,如果我知道所有该行的每个单元格中的值,但我的问题是,只有在每一行中可能相同的单元格是序列号。我需要搜索serial_number列,如果该列中有任何字符串等于serialNum变量的当前值,我需要删除(或覆盖)该行。在

^{pr2}$

有人知道一个简单的方法吗?我见过其他人说必须使用ID或临时表,但我希望有更简单的方法来完成我的任务。任何建议都很好。在


Tags: 方法字符串程序示例datestatusserialnum
3条回答

我找到了一个可行的解决方案:

sql = "DELETE FROM test WHERE serial_num = ?" c.execute(sql, (serialNum,))

因为某些原因serialNum后面的逗号必须存在。谢谢@Michiel arienforhead start

SQL支持这一点:只需使用delete

"delete from test where serial_num=<some input>;"

或者在这种情况下

^{pr2}$

使用SQL时不需要搜索列表。SQL是声明性的:您告诉它使用查询做什么,而不是如何做。不要遍历所有行来检查要删除的行:告诉它要删除什么,数据库引擎将找到满足该目标的最佳/最快方法。在

希望我能很好地解释你的问题

for row in c.execute('SELECT * FROM test WHERE serial_num = ?', serialNum'):
    # do whatever you want on row
    print row

相关问题 更多 >