Python,MySQLdb,无法更新行

时间:2013-09-28 13:58:59

标签: python mysql-python

我知道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 是一个长整数,我已经检查过了。那有什么不对?

谢谢

1 个答案:

答案 0 :(得分:2)

更改未生效:

你在做交易吗?如果是这种情况,你需要提交。

引用

三引号字符串是多行的,单引号字符串不是。

插值

因为这实际上不是字符串插值。这些占位符由MySQLdb解释,它将为您处理报价。