【发布时间】:2013-09-28 13:58:59
【问题描述】:
我知道 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 是一个长整数,我已经检查过了。那怎么了?
谢谢
【问题讨论】:
标签: python mysql-python