You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQLite3(DB Browser)中按邮箱匹配删除行报错,求解决方案

解决SQLite3中删除指定邮箱对应行的报错问题

嘿,我瞅你这代码里的问题挺明显的,咱们一步步拆解解决:

1. 核心问题:DELETE语句语法错误

你写的SQL语句里DELETE ({coi}) FROM {tn}...是错的——DELETE操作是删除整行数据,不需要在DELETE后面指定列名(如果是要删除某个列的内容,那应该用UPDATE把该列设为NULL;如果是要删除整个列,才用ALTER TABLE DROP COLUMN)。正确的删除行的语法应该是:

DELETE FROM table_name WHERE column_name = 'value'

2. 第二个坑:直接拼接用户输入的SQL注入风险+字符串转义问题

你用format把用户输入的邮箱直接拼进SQL语句里,不仅容易因为邮箱里包含单引号(比如test'@example.com)导致语法报错,还会带来SQL注入的安全隐患。SQLite支持参数化查询,用占位符?来替代变量,让数据库自己处理参数的转义和安全问题。

修改后的完整代码示例

column_2 = 'Email'
table_name = 'Personal_Information'
cn = 'Email'  # 这里你之前变量名重复了,其实可以直接用column_2就行
deleting_user = easygui.multenterbox(msg1, title, fieldNames)
deleting_email = deleting_user[2]

# 正确的SQL语句+参数化查询
dbCursor.execute("DELETE FROM {tn} WHERE {cn} = ?".format(tn=table_name, cn=column_2), (deleting_email,))
# 别忘了提交事务!如果是操作数据库的写操作,必须提交才能生效
dbConnection.commit()

额外提醒

  • 执行完DELETE操作后,一定要调用dbConnection.commit()提交事务,不然你的删除操作不会真正写入数据库。
  • 如果你的需求其实是删除某一行里的Email列的值(不是删除整行),那应该用UPDATE语句:
    dbCursor.execute("UPDATE {tn} SET {cn} = NULL WHERE {cn} = ?".format(tn=table_name, cn=column_2), (deleting_email,))
    dbConnection.commit()
    

内容的提问来源于stack exchange,提问作者Beni billhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:07:51