我知道 SO 不是“调试我的代码服务”,但是在检查并重试了几个小时之后,要么我错过了一些非常愚蠢的东西,要么我的 MySQLdb 模块中可能存在错误(或错误的编译)......
我也有一些相关的问题,我已经把发布的代码放在一起......
def NextDocumentIdToCache():
if not OpenConnection():
return 0
# ...setting string values... #
cur = connection.cursor(mysql.cursors.DictCursor)
cur.execute('SELECT * FROM documents WHERE resolutions <> %s AND pdf > 0 AND status = %s AND expire > %s AND locked = %s LIMIT 0,1', (resolutions, status, expireLimit, ''))
rowsCount = cur.rowcount
if rowsCount==0:
return 0
row = cur.fetchone()
id = row['document_id']
从现在开始一切正常。连接打开,我得到一行并检索函数末尾返回的正确id 。
然后我需要对获取的行执行更新操作...
cur.close()
cur = connection.cursor(mysql.cursors.Cursor)
我已经关闭了光标并打开了一个新的。我真的需要这样做吗?或者我可以重复使用相同的光标吗?
cur.execute("""UPDATE documents SET locked = %s WHERE document_id = %s""", ("worker: rendering pages", id))
这实际上不会更新该行。没有例外发生,只是不工作。
终于函数结束了……
cur.close()
return id
还有几个问题。
有什么区别
cur.execute("""UPDATE documents....
和
cur.execute("UPDATE documents....
我看过这两个版本。三重双引号,单双引号,单单引号之间的功能区别是什么?
最后
如果我写查询
cur.execute("""UPDATE documents SET locked = %s WHERE document_id = %d""", ("worker: rendering pages", id))
(注意%d而不是%s)我得到一个错误。但是id是一个长整数,我已经检查过了。那么有什么问题呢?
谢谢