【问题标题】:Python, MySQLdb, unable to update rowPython,MySQLdb,无法更新行
【发布时间】: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


    【解决方案1】:

    更改未生效:

    你在做交易吗?如果是这种情况,您需要commit()。定义 Python 数据库 API 的PEP 249 指出,即使您没有显式启用事务,连接也将使用事务:“请注意,如果数据库支持自动提交功能,则最初必须关闭。”

    引用

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

    插值

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

    【讨论】:

    • 未明确(我没有编写代码来启动事务。只是打开连接并执行了两个查询)但是在最后添加 connection.commit() 解决了问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多