python mysql删除语句不起作用

时间:2012-08-22 22:38:38

标签: python sql transactional

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

    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'

感谢您的帮助!

2 个答案:

答案 0 :(得分:19)

您需要使用连接对象上的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()

<强> SAFE!

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

答案 1 :(得分:0)

cursor.execute(“从maillist_subscription中删除,其中id ='” + id +“'”)

conn.commit()