Возможно, вы захотите создать класс, использующий таблицу sqlite в памяти:
import sqlite3
class MyTable(object):
def __init__(self):
self.conn=sqlite3.connect(':memory:')
self.cursor=self.conn.cursor()
sql='''\
CREATE TABLE foo ...
'''
self.execute(sql)
def execute(self,sql,args):
self.cursor.execute(sql,args)
def delete(self,id,reason):
sql='UPDATE table SET softdelete = 1, reason = %s where tableid = %s'
self.cursor.execute(sql,(reason,id,))
def verify(self):
# Check that certain conditions are true
# Report (or raise exception?) if violated
def build_index(self):
self.verify()
...
Мягкое удаление может быть реализовано с помощью столбца softdelete
(типа bool).
Точно так же у вас может быть столбец для хранения причины удаления.
Для удаления просто потребуется обновить строку и изменить значение softdelete
.
Выбор строк, которые не были удалены, можно выполнить с помощью условия SQL WHERE softdelete != 1
.
Вы можете написать verify
метод, чтобы проверить, удовлетворяют ли условия ваших данных. И вы можете вызвать этот метод из вашего build_index
метода.
Другой альтернативой является использование массива структурированных масок.
Трудно сказать, что будет быстрее. Возможно, единственный верный способ определить это - написать код для каждого из них и сравнить его с данными реального времени.