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()
подробнее об этом здесь