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

Why can my Python MySQLdb script see, but not make live changes to, my database?

我正在使用自定义的 Django 安装,尽管我正在处理的问题来自旨在更新数据库的命令行工具。该工具按预期读取数据库,其功能类似于在 MySQL 的命令行中键入 SELECT。但是,似乎永远不会 更改 数据库。我尝试了一些变体,包括试验 运行 只是 execute()ing 我想要用于试验目的的文字查询,但它没有做任何事情,在没有报告异常或错误的情况下失败。 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,但我什至不想在字面版本工作之前专注于复杂性。

谢谢,

您需要提交数据

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

查看 documentation 以获取更多信息