1
我知道SO不是“调试我的代码服务”,但经过几个小时的检查和重试后,我错过了一些非常愚蠢的东西,或者有一个错误(或编译错误)在我MySQLdb的模块...Python,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是一个长整数,我检查过。那么,怎么了?
谢谢
不明确(我没有写代码来启动一个事务,只是打开了连接并执行了两个查询)。但是在最后添加** connection.commit()**解决了这个问题。谢谢。 – Paolo