我正在尝试捕获可能的错误并将调用捆绑在1个函数中。 我的问题是,我无法在游标的执行功能中使用* args参数。
def execute_query(self, query, *args, **kwargs):
"""
execute the query in the database with synchronized blocks
:param query:
:return:
"""
result = kwargs.pop("result", None)
try:
self.lock.acquire(True)
if args:
print "args", args
self.cursor.execute(query, args)
else:
self.cursor.execute(query)
if result:
return self.cursor.fetchall()
except sqlite3.ProgrammingError as err:
self.logger.warn("An error occured: {0:s}".format(err))
finally:
self.lock.release()
我这样称呼函数:
self.execute_query(u"DELETE FROM DownloadQueue WHERE path=? AND url=?", path, url, result=False)
在印刷品中我得到以下结果:
args (u'page_001.jpg', u'http://www.google.de')
后面跟着错误:
2015-10-12 01:47:17,543 [MainThread] [WARNI] An error occured: Incorrect number of bindings supplied. The current statement uses 2, and there are 0 supplied.
但如果我直接在控制台中使用这个打印的参数,它可以正常工作:
>>> cursor.execute(u"DELETE FROM DownloadQueue WHERE path=? AND url=?", (u'page_001.jpg', u'http://www.google.de'))
为什么我确实收到此错误,即使参数应该完全相同?我该如何防止这种情况?
编辑: 代码工作正常,不知何故我的IDE缓存旧代码,否则我无法解释如何使用此函数调用,但重新启动我的IDE后,代码工作正常......
亲切的问候