python mysql删除语句不起作用

新手上路,请多包涵

在这里,我试图删除任何在其电子邮件/用户名中包含 “ 的用户。

     def removeQuote(self, tbl,record):
            """ Updates the record """
            statmt="select id from %s WHERE `email` LIKE '%%\"%%'" % (tbl)
            self.cursor.execute(statmt)
            rows=list(self.cursor.fetchall())
            for idx, val in enumerate(rows):
                    id= val[0]
                    delstatmt = "DELETE FROM `maillist_subscription` WHERE id = '%s'" % id
                    print delstatmt
                    self.cursor.execute(delstatmt)

此输出显示操作成功完成,但记录保留在数据库中。输出还显示了正确的 mysql 语句:

 DELETE FROM `maillist_subscription` WHERE id = '8288754'

感谢你的帮助!

原文由 Cmag 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 579
2 个回答

您需要使用连接对象上的 commit() 方法来提交更改。大多数 DBAPI 接口使用隐式事务。

另外,不要使用字符串格式来生成 SQL 查询!它会让你接受 SQL 注入:

不安全!!

 # What happens if id = "1'; DROP DATABASE somedb" ?
delstatmt = "DELETE FROM `maillist_subscription` WHERE id = '%s'" % (id,)
cursor.execute(delstatmt)
conn.commit()

安全的!

 delstatmt = "DELETE FROM `maillist_subscription` WHERE id = ?"
cursor.execute(delstatmt, (id,))
conn.commit()

原文由 Colin Dunklau 发布,翻译遵循 CC BY-SA 4.0 许可协议

cursor.execute(“DELETE FROM maillist_subscription WHERE id = ‘”+id+“’”)

conn.commit()

原文由 Sanjay Rai 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题