由于某种原因,这是轰炸:
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")
谢谢! :)
答案 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上使用你的应用程序。您应该不使用字符串格式来创建查询。