Я привык (испорчен?) python SQLite интерфейс для работы с базами данных SQL. Одна из приятных особенностей в API-интерфейсе python SQLite - "менеджер контекста", т.е. Оператор python with
. Я обычно выполняю запросы следующим образом:
import as sqlite
with sqlite.connect(db_filename) as conn:
query = "INSERT OR IGNORE INTO shapes VALUES (?,?);"
results = conn.execute(query, ("ID1","triangle"))
С приведенным выше кодом, если мой запрос изменяет базу данных, и я забыл запустить conn.commit()
, менеджер контекста запускает его для меня автоматически после выхода из оператора with
. Он также отлично справляется с исключениями: если возникает исключение, прежде чем я что-то совершу, база данных будет отброшена.
Теперь я использую интерфейс MySQLdb
, который, похоже, не поддерживает аналогичный менеджер контекста из коробки. Как мне создать свою собственную? Существует связанный с этим вопрос здесь, но он не предлагает полного решения.