使用MySQLdb检查错误

时间:2012-07-14 21:07:44

标签: python mysql mysql-python

我无法找到有关如何对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的值上传到表timestamptimeid列的第一个值(或任何值)。

我所做的一切似乎都没有用,而且我已经坐了几个小时尝试了无数的迭代。

1 个答案:

答案 0 :(得分: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()

来自the MySQLdb FAQ:

  

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

     

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

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