Python,MySQLdb,无法更新行

标签 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))

这实际上不会更新该行。没有异常(exception)发生,只是不起作用。

函数终于结束了...

    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 是一个长整数。那么出了什么问题?

谢谢

最佳答案

更改未生效:

您正在进行交易吗?如果是这种情况,您需要 commit()PEP 249定义了 Python 数据库 API,规定连接将使用事务,即使您没有显式启用它们:“请注意,如果数据库支持自动提交功能,则必须首先关闭该功能。”

引用

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

插值

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

关于Python,MySQLdb,无法更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067776/

相关文章:

python - Django: Mysql-python 安装错误

Python MySQL-Connector 需要一分多钟才能打开连接

python - mysqldb 中的转义值

python - pyvisa 给出错误,但 linux-gpib 工作

python - 具有固定参数的曲线拟合分段函数

python - Datadog python api错误信息未找到代理或无效的配置文件

python - 使用 MySQLdb 插入 MySQL - python

python - 如何使用opencv的cv2.putTexttext显示文字2秒?

python - 无法将我的 ImageView 更改为从 Swift 流中检索的数据

Python/MySQL查询语法导致TypeError