1

我无法找到有关如何对 MySQLdb 进行错误检查的任何信息。我一直在尝试为 MySQL 数据库执行一个简单的更新命令,但它根本不起作用。无论我如何更改条款,或者我提交给它的变量类型。

以下是我的一些(已注释掉的)尝试:

timeid = twitseek['max_id']
            #timeup = "UPDATE `timeid` set `timestamp`='" + str(timeid) + "';"
            #print timeup
            #c.execute(timeup)

            #timeup = "UPDATE timeid SET timestamp=\"" + str(timeid) + "\"";
            #timeup = "UPDATE timeid set timestamp = '500';"
            timeup = 500
            c.execute("""UPDATE timeid SET timestamp = %d;""", timeup)
            #c.execute(timeup)

我要做的就是将 的值上传timeid到表中timestamp列的第一个值(或任何值)timeid

我所做的一切似乎都不起作用,而且我已经坐在这里数小时尝试无数次迭代。

4

1 回答 1

1

您似乎错过了.commit()对您的连接对象的强制调用以提交您的更改。

# Your cursor is c
# We don't see your connection object, but assuming it is conn...
c.execute("""UPDATE timeid SET timestamp = %d;""", timeup)
conn.commit()

上述方法将产生有效的 SQL,但您不会通过这种方式获得预准备语句的安全优势。传入参数的正确方法是使用%s, 并传入参数元组:

c.execute("UPDATE timeid SET timestamp = %s;", (timeup,))
conn.commit()

MySQLdb 常见问题解答:

从 1.2.0 开始,MySQLdb 默认禁用自动提交,这是 DB-API 标准 (PEP-249) 的要求。如果您使用 InnoDB 表或其他类型的事务表类型,则需要在关闭连接之前执行 connection.commit() ,否则您的任何更改都不会写入数据库。

相反,您也可以使用 connection.rollback() 丢弃自上次提交以来所做的任何更改。

就错误检查而言,失败的连接或语法无效的查询将引发异常。因此,您可能希望将其包装try/except在 Python 中常见的形式中。

于 2012-07-14T21:12:59.857 回答