Python中的简单MYSQL更新

时间:2015-08-06 09:30:33

标签: python mysql

我尝试在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

3 个答案:

答案 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)