13

ここでは、電子メール/ユーザー名に「」が含まれているユーザーを削除しようとしています。

    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'

ご協力ありがとうございます!

4

2 に答える 2

25

接続オブジェクトで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()
于 2012-08-22T22:41:47.673 に答える
1

cursor.execute( "DELETE FROM maillist_subscription WHERE id ='" + id + "'")

conn.commit()

于 2020-07-19T09:47:57.600 に答える