我无法找到有关如何对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
列的第一个值(或任何值)。
我所做的一切似乎都没有用,而且我已经坐了几个小时尝试了无数的迭代。
答案 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()
从1.2.0开始,MySQLdb默认禁用自动提交,如 DB-API标准(PEP-249)要求。如果您使用的是InnoDB 表格或某些其他类型的交易表类型,您需要 在关闭连接之前执行connection.commit(),否则不执行任何操作 您的更改将写入数据库。
相反,你也可以使用connection.rollback()扔掉任何东西 自上次提交以来您所做的更改。
就错误检查而言,连接失败或语法无效的查询将引发异常。因此,您希望将其包装在try/except
中,这在Python中很常见。