from abc import ABCMeta from openpyxl import Workbook, load_workbook class ExcelDB: def __init__(self, path, password=None, offset_row=0, offset_column=0): self._path = path self._pass = password self._offset_row = offset_row self._offset_column = offset_column def init(self): pass def save(self, model): wb = load_workbook(self._path) ws = wb[model.Meta.table] ws["A1"] = model.username wb.save(self._path) def create(self, model): wb = load_workbook(self._path) ws = wb[model.Meta.table] next_row = len(tuple(ws.rows)) + 1 next_column = 1 + self._offset_column for e in model.__dict__: if e in ['__module__', 'Meta', '__doc__']: continue c = ws.cell(next_row, next_column) c.value = model.__dict__.get(e) next_column = next_column + 1 wb.save(self._path) def read(self, model): wb = load_workbook(self._path) ws = wb[model.Meta.table] def create_tables(self, tables): wb = Workbook() wb.remove_sheet(wb.active) for t in tables: wb.create_sheet(t.Meta.table) ws = wb[t.Meta.table] i = 1 for e in t.__dict__: if e in ['__init__', '__module__', 'Meta', '__doc__']: continue c = ws.cell(1, i) c.value = t.__dict__.get(e).caption i = i + 1 wb.save(self._path)