Ошибка обновления MySQLdb Python - PullRequest
13 голосов
/ 22 июня 2009

Хорошо. Я построил здесь браузер запросов 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

Так есть идеи, что могло бы произойти?

Ответы [ 2 ]

19 голосов
/ 22 июня 2009

Я считаю, что @ Джейсон Крейтон и @ С. Лотт правы.

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

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

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

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

# or
conn = mysql.connection(host, port)
conn.autocommit(True)
16 голосов
/ 22 июня 2009

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

Редактировать: в FAQ MySQLdb есть запись , которая может иметь значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...