我知道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 是一个长整数,我已经检查过了。那有什么不对?
谢谢
答案 0 :(得分:2)
你在做交易吗?如果是这种情况,你需要提交。
三引号字符串是多行的,单引号字符串不是。
因为这实际上不是字符串插值。这些占位符由MySQLdb解释,它将为您处理报价。