Я использую что-то вроде этого:
class SqliteRow(object):
def __init__(self):
self.fields = []
def add_field(self, name, value):
self.fields.append(name)
setattr(self, name, value)
def to_tuple(self):
return tuple([getattr(self, x) for x in self.fields])
с этим:
def myobject_factory(cursor, row):
myobject= MyObject()
for idx, col in enumerate(cursor.description):
name, value = (col[0], row[idx])
myobject.add_field(name, value)
return myobject
MyObject()
- это класс, который наследуется от SqliteRow
.
Класс SqliteRow является базовым классом для каждого объекта, который я хочу вернуть запросом.
Каждый столбец становится атрибутом и регистрируется в списке fields
.
Функция to_tuple
используется для изменения всего объекта в форму, подходящую для запросов (просто передайте весь объект и забудьте).
Чтобы получить разные типы классов этой функции. Вам необходимо создать фабричный объект, который будет генерировать объекты на основе списка полей (например: dict с {some_unique_value_made_of_fields: class})
Таким образом, я получаю простой ORM.