python mysqldb删除行

时间:2012-01-01 19:46:38

标签: python mysql

由于某种原因,这是轰炸:

print tbl,record
statmt="DELETE FROM '%s' WHERE email LIKE '%s'" %(tbl,record)
print statmt
self.cursor.execute(statmt)

错误:

maillist_frogs test@testovich.com
DELETE FROM 'maillist_frogs' WHERE email LIKE 'test@testovich.com'
Traceback (most recent call last):
  File "./compare.py", line 123, in <module>
    main()
  File "./compare.py", line 117, in main
    remove_mailgust = sql_mailgust.removeRow ("maillist_frogs",x)
  File "./compare.py", line 81, in removeRow
    self.cursor.execute(statmt)
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/cursors.py", line 174, in execute
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''maillist_frogs' WHERE email LIKE 'test@testovich.com'' at line 1")

谢谢! :)

3 个答案:

答案 0 :(得分:8)

我刚才遇到了类似的问题。

经过进一步的研究,我意识到在删除后我忘了做connection.commit(),或者,正如我在其他地方找到的那样,你可以在做任何其他数据操作之前做cursor.execute("set autocommit = 1")如果您不需要控制事务提交,它们会立即自动提交。

这可能是Cmag代码的问题,虽然没有看到更多,但很难说。

答案 1 :(得分:2)

def removeRow(self,tbl,record):
        """ Remove specific record """
        record = record[0]
        statmt="DELETE FROM %s WHERE email LIKE '%s'" %(tbl,record)
        self.cursor.execute(statmt)

答案 2 :(得分:1)

您有两个问题:

导致崩溃的第一个问题是您使用常规引号引用了您的表名。如果要引用表名,则应使用反引号(`)。

第二个问题,你'做得不对'。您不应该使用字符串格式创建查询,而是让Python MySQLdb的cursor.execute正确地为您完成。

为此,请尝试以下操作:

statmt = "DELETE FROM %s WHERE email LIKE %s" 
self.cursor.execute(statmt, (tbl, record))

顺便说一下,在MySQLdb查询上使用字符串格式化可以让你接受SQL注入,以防你要在Web上使用你的应用程序。您应该使用字符串格式来创建查询。