Python MySQL - SELECTs работают, но не удаляют? - PullRequest
9 голосов
/ 20 сентября 2009

Я новичок в Python и MySQL-адаптере Python. Я не уверен, что я упускаю что-то очевидное здесь:

db = MySQLdb.connect(# db details omitted)
cursor = self.db.cursor()

# WORKS
cursor.execute("SELECT site_id FROM users WHERE username=%s", (username))
record = cursor.fetchone()

# DOES NOT SEEM TO WORK
cursor.execute("DELETE FROM users WHERE username=%s", (username))

Есть идеи?

Ответы [ 4 ]

12 голосов
/ 21 сентября 2009

Я предполагаю, что вы используете механизм хранения, который поддерживает транзакции (например, InnoDB), но вы не вызываете db.commit() после УДАЛЕНИЯ. Эффект УДАЛИТЬ отменяется, если вы не делаете коммит.

См. http://mysql -python.sourceforge.net / FAQ.html # my-data-исчезли или выиграли t-go-away :

Начиная с 1.2.0, MySQLdb отключает автокоммит по умолчанию, как того требует стандарт DB-API (PEP-249). если ты используете таблицы InnoDB или некоторые другие тип типа транзакционной таблицы, вам нужно будет сделать connection.commit () перед закрытием соединения или ни одно из ваших изменений не будет написано в базу данных.

См. Также аналогичный вопрос SO: Сбой запроса на обновление Python MySQLdb

1 голос
/ 22 сентября 2009

Возможно, вы нарушаете ограничение внешнего ключа.

0 голосов
/ 02 ноября 2012

Возможно, проблема в том, что вы не вносите изменения. это может быть сделано conn.commit()

Подробнее об этом здесь

0 голосов
/ 22 сентября 2009

к вашему коду выше, просто добавьте вызов к self.db.commit().

Функция далеко не раздражает:

Это спасает вас от проблем с повреждением данных когда в ваших запросах есть ошибки.

...