为什么我的Python MySQLdb脚本可以看到,但不能对我的数据库进行实时更改?

时间:2016-06-06 15:24:43

标签: python mysql mysql-python

我正在使用自定义的Django安装,虽然我正在处理的问题来自用于更新数据库的命令行工具。该工具按预期读取数据库,并且与在MySQL命令行中键入SELECTs相比具有相同的功能。但是,似乎永远不会更改数据库。我尝试了一些变体,包括试用execute()我希望用于试用目的的文字查询,但它没有做任何事情,没有报告异常或错误就失败了。 MySQL命令行可以很好地处理更新。

我的代码,包括可操作的面向读取的代码和静默失败的面向编写的代码(以清理形式):

#!/usr/bin/python

import MySQLdb
import sys

connection = MySQLdb.connect(user='root', passwd="_______________")
cursor = connection.cursor()
cursor.execute('USE _____________')

if __name__ == '__main__':
    if sys.argv[1] == 'check': # This seems to work
        username = sys.argv[2]
        cursor.execute(
          '''SELECT username, foo FROM auth_user WHERE username = %s''',
          [username])
        for result in cursor:
            print 'Username: ' + result[0]
            print 'Foo: ' + str(result[1])
    if sys.argv[1] == 'set': # This seems to function as a noop
        username = sys.argv[2]
        foo = int(sys.argv[3])
        cursor.execute('UPDATE auth_user SET foo = ' + str(foo) + 
          " WHERE username = '" + username.replace("'", "\\'") + "'")

我应该采取哪些其他步骤来更新给定行上的字段foo?更新查询是故意愚蠢的SQL,但我不想在我的文字版本工作之前专注于复杂性。

谢谢,

1 个答案:

答案 0 :(得分:2)

您需要提交数据

    cursor.execute('UPDATE auth_user SET foo = ' + str(foo) + " WHERE username = '" + username.replace("'", "\\'") + "'")
    connection.commit()

查看documentation以获取更多信息