我正在尝试使用Python 2.7脚本更新MySQL数据库中的数据集。我正在更新一个启用了唯一选项的字段。当我尝试添加重复条目时,Python不会给我一个错误消息。
connection = MySQLdb.connect(
host=DB_HOST,
db=DB_DB,
user='root', passwd='',
charset="utf8"
)
cur = connection.cursor()
sql = "UPDATE type SET article_code='Duplicate_Code' where id=9"
try:
cur.execute(sql)
connection.commit()
print "No ERROR"
except:
print "ERROR"
connection.close()
输出:无错误
但是,数据集未更新。如果我在phpMyAdmin界面中输入相同的SQL代码,我会收到以下消息:
#1062 - Duplicate entry 'Duplicate_Code' for key 'article_code'
我希望我的Python脚本进入except选项。 我在这里做错了什么?
答案 0 :(得分:0)
如果您在此处阅读示例:http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb
它声明你应该使用更类似于此的东西:
cur.execute("""UPDATE type SET article_code=%s where id=%s""", ('Duplicate_Code', 9))
因为查询中的9
将转换为'9'
,这可能不会作为键存在,因此您的查询不会执行任何操作,这意味着总是成功。
另外作为旁注,建议始终使用此模式,因为MySQLdb会逃避您的值,否则您/其他人可能会想要做一些可以打开SQL注入的事情。
从查询正文
编辑'Duplicate_Code'