У меня есть модель SQLAlchemy, которая представляет файл и, таким образом, содержит путь к фактическому файлу. Поскольку удаление строки и файла базы данных должно идти (так что оставшихся потерянных файлов не осталось, а строки не указываются на удаленные файлы), я добавил метод delete()
для моего класса модели:
def delete(self):
if os.path.exists(self.path):
os.remove(self.path)
db.session.delete(self)
Это прекрасно работает, но имеет один огромный недостаток: файл удаляется непосредственно перед завершением транзакции, содержащей удаление базы данных.
Один параметр будет выполняться в методе delete()
, но я не хочу этого делать, так как я не могу завершить текущую транзакцию. Поэтому я ищу способ отложить удаление физического файла до тех пор, пока транзакция, удаляющая строку, не будет выполнена.
SQLAlchemy имеет after_delete
событие, но в соответствии с документами это срабатывает при испускании SQL (т.е. на флеше), который слишком рано. Он также имеет событие after_commit
, но на данный момент все удаленные в транзакции, вероятно, были удалены из SA.