Python MySQL-выбирает работу, но не удаляет?

Я новичок в 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 ответов


Я бы предположил, что вы используете механизм хранения, который поддерживает транзакции (например, InnoDB), но вы не вызываете db.commit() после "удалить". Эффект удаления отбрасывается, если вы не фиксируете.

см http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-away:

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

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


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


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

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

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


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

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