Не удалось выполнить запрос на обновление Python MySQLdb

Хорошо. Я построил здесь браузер запросов mysql, например navicat. Использование MySQLdb для выполнения запросов.

Здесь странная часть. Когда я запускаю запрос через программу (используя MySQLdb), это дает мне успех, затронутые строки = 1, но когда я смотрю на него в phpmyadmin, значение не изменилось.

поэтому перед выполнением запроса я распечатаю его, скопирую и вставлю в окно запроса phpmyadmin, нажмите go, и он будет работать. Короче говоря, запрос обновления не работает, но когда я копирую и вставляю его в phpmyadmin, он работает.

self.tbl.sql.use(self.tbl.database)       # switches to correct database. I've printed this and it uses the corrected db
if self.tbl.sql.execute(query) == True:
    print sql_obj.rows_affected()         # returns 1 (since i only do 1 query)

И вот часть класса SQL

def execute(self, query):

    try:
        self.cursor.execute(query)
        return True
    except MySQLdb.ProgrammingError as error:
        print "---->SQL Error: %s" % error
        return False
    except MySQLdb.IntegrityError as e:
        print "--->SQL Error: %s" % e    
        return False

Итак, какие-нибудь идеи, что может произойти?

Ответы

Ответ 1

Просто догадаться: возможно, код в Python запущен внутри транзакции, и транзакция, возможно, должна быть явно зафиксирована?

Изменить: здесь есть запись в FAQ MySQLdb, которая может быть релевантной.

Ответ 2

Я считаю, что Джеймс Крейтон и @S.Lott верны.

По крайней мере, если обновляемая таблица находится в транзакционном хранилище. InnoDB является транзакционным, ISAM не является.

Вы либо должны называть commit() в своем объекте подключения перед его закрытием, либо вы должны установить соединение в режим автосохранения. Я не уверен, как вы это делаете для подключения MySQLdb, я полагаю, вы либо задали аргумент конструктору соединения, либо задали свойство после создания объекта соединения.

Что-то вроде:

conn = mysql.connection(host, port, autocommit=True)

# or
conn = mysql.connection(host, port)
conn.autocommit(True)