我尝试在PYTHON中进行简单的MySQL更新,只要我完全处于新的状态,我就很有可能在这里做了一些疯狂的mystake。
当我对某个特定ID进行更新时,DB中没有任何变化(甚至控制台说0行已更改)
有人可以看一下并告诉我我做错了什么吗? 感谢
P.S。使用mysqlclient和python 3.4.3如果它是相关的
代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
con = mdb.connect('localhost', 'root', '', 'audatexcz');
with con:
cur = con.cursor()
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Matis", "4"))
print ("Number of rows updated:", cur.rowcount)
控制台答案:
Number of rows updated: 0
Process finished with exit code 0
答案 0 :(得分:0)
我已复制您的情况,无法重现您的问题。另外在Python 3.4.3上 - 全新安装mysqlclient
。请参阅下面的控制台输我想知道我们的列类型是否不匹配(我的Id
列是使用INT
关键字创建的),或者您的大小写中可能有拼写错误?例如 - 您的列名是id
而不是Id
?
>>> con = mdb.connect('localhost', 'rsnape', '<my_password>', 'testdb');
>>> with con:
... cur = con.cursor()
... cur.execute("SELECT * FROM Writers")
... rows = cur.fetchall()
... for row in rows:
... print(row)
...
5
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')
(5, 'e')
>>> with con:
... cur = con.cursor()
... cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
... ("Guy de Matis", "4"))
... print("number of rows",cur.rowcount)
...
1
number of rows 1
>>> with con:
... cur = con.cursor()
... cur.execute("SELECT * FROM Writers")
... rows = cur.fetchall()
... for row in rows:
... print(row)
...
5
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'Guy de Matis')
(5, 'e')
答案 1 :(得分:0)
问题可能是您传递id
的字符串值而不是整数值。尝试改为
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Matis", 4))
虽然@JRichardSnape的回答表明这不是必要的,所以这是一个很长的镜头。
答案 2 :(得分:-1)
添加单引号,并直接读取返回值。
cur = con.cursor()
rowsAffected = cur.execute("UPDATE Writers SET Name='%s' WHERE Id='%s'", ("Guy de Matis", "4"))
print ("Number of rows updated:", rowsAffected)