Ответ 1
Просто догадаться: возможно, код в Python запущен внутри транзакции, и транзакция, возможно, должна быть явно зафиксирована?
Изменить: здесь есть запись в FAQ 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
Итак, какие-нибудь идеи, что может произойти?
Просто догадаться: возможно, код в Python запущен внутри транзакции, и транзакция, возможно, должна быть явно зафиксирована?
Изменить: здесь есть запись в FAQ MySQLdb, которая может быть релевантной.
Я считаю, что Джеймс Крейтон и @S.Lott верны.
По крайней мере, если обновляемая таблица находится в транзакционном хранилище. InnoDB
является транзакционным, ISAM
не является.
Вы либо должны называть commit()
в своем объекте подключения перед его закрытием, либо вы должны установить соединение в режим автосохранения. Я не уверен, как вы это делаете для подключения MySQLdb, я полагаю, вы либо задали аргумент конструктору соединения, либо задали свойство после создания объекта соединения.
Что-то вроде:
conn = mysql.connection(host, port, autocommit=True)
# or
conn = mysql.connection(host, port)
conn.autocommit(True)