create, read, update and delete methods works
parent
e03cce48f0
commit
d329857a91
|
|
@ -0,0 +1 @@
|
||||||
|
.idea/
|
||||||
77
exceldb.py
77
exceldb.py
|
|
@ -4,51 +4,76 @@ from openpyxl import Workbook, load_workbook
|
||||||
|
|
||||||
class ExcelDB:
|
class ExcelDB:
|
||||||
|
|
||||||
def __init__(self, path, password=None, offset_row=0, offset_column=0):
|
def __init__(self, path, password=None):
|
||||||
self._path = path
|
self._path = path
|
||||||
self._pass = password
|
self._pass = password
|
||||||
self._offset_row = offset_row
|
|
||||||
self._offset_column = offset_column
|
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def save(self, model):
|
def create(self, model):
|
||||||
wb = load_workbook(self._path)
|
wb, ws = self.get_worksheet(model)
|
||||||
ws = wb[model.Meta.table]
|
if model.row is None:
|
||||||
ws["A1"] = model.username
|
next_row = len(tuple(ws.rows)) + 1
|
||||||
|
else:
|
||||||
|
next_row = model.row
|
||||||
|
for e in self._get_params(model):
|
||||||
|
c = ws.cell(next_row, type(model).__dict__.get(e).column+model.offset_cols)
|
||||||
|
c.value = model.__dict__.get(e)
|
||||||
|
model.row = next_row
|
||||||
wb.save(self._path)
|
wb.save(self._path)
|
||||||
|
|
||||||
def create(self, model):
|
def _get_element(self, search_for, elements):
|
||||||
wb = load_workbook(self._path)
|
for e in elements:
|
||||||
ws = wb[model.Meta.table]
|
if e.value == search_for:
|
||||||
next_row = len(tuple(ws.rows)) + 1
|
return e
|
||||||
next_column = 1 + self._offset_column
|
return None
|
||||||
|
|
||||||
|
def _get_params(self, model):
|
||||||
|
params = list()
|
||||||
for e in model.__dict__:
|
for e in model.__dict__:
|
||||||
if e in ['__module__', 'Meta', '__doc__']:
|
if e in ['offset_rows', 'offset_cols', '_row', '_init', 'Meta', ] or e.startswith('__'):
|
||||||
continue
|
continue
|
||||||
c = ws.cell(next_row, next_column)
|
else:
|
||||||
c.value = model.__dict__.get(e)
|
params.append(e)
|
||||||
next_column = next_column + 1
|
return params
|
||||||
wb.save(self._path)
|
|
||||||
|
|
||||||
def read(self, model):
|
def read(self, model):
|
||||||
|
wb, ws = self.get_worksheet(model)
|
||||||
|
entries = list()
|
||||||
|
model_params = self._get_params(model)
|
||||||
|
for row in ws.rows:
|
||||||
|
if row[0].row <= (model.offset_rows + 1):
|
||||||
|
continue
|
||||||
|
params = dict()
|
||||||
|
for p in model_params:
|
||||||
|
params[p] = row[model.__dict__.get(p).column-1].value
|
||||||
|
entries.append(model(**params))
|
||||||
|
return entries
|
||||||
|
|
||||||
|
def update(self, model):
|
||||||
|
self.create(model)
|
||||||
|
|
||||||
|
def delete(self, model):
|
||||||
|
wb, ws = self.get_worksheet(model)
|
||||||
|
ws.delete_rows(model.row)
|
||||||
|
wb.save(self._path)
|
||||||
|
|
||||||
|
def get_worksheet(self, model):
|
||||||
wb = load_workbook(self._path)
|
wb = load_workbook(self._path)
|
||||||
ws = wb[model.Meta.table]
|
ws = wb[model.Meta.table]
|
||||||
|
return wb, ws
|
||||||
|
|
||||||
|
def create_tables(self, models):
|
||||||
def create_tables(self, tables):
|
|
||||||
wb = Workbook()
|
wb = Workbook()
|
||||||
wb.remove_sheet(wb.active)
|
wb.remove_sheet(wb.active)
|
||||||
for t in tables:
|
for model in models:
|
||||||
wb.create_sheet(t.Meta.table)
|
wb.create_sheet(model.Meta.table)
|
||||||
ws = wb[t.Meta.table]
|
ws = wb[model.Meta.table]
|
||||||
i = 1
|
i = 1
|
||||||
for e in t.__dict__:
|
for e in self._get_params(model):
|
||||||
if e in ['__init__', '__module__', 'Meta', '__doc__']:
|
|
||||||
continue
|
|
||||||
c = ws.cell(1, i)
|
c = ws.cell(1, i)
|
||||||
c.value = t.__dict__.get(e).caption
|
c.value = model.__dict__.get(e).caption
|
||||||
i = i + 1
|
i = i + 1
|
||||||
wb.save(self._path)
|
wb.save(self._path)
|
||||||
|
|
||||||
|
|
|
||||||
14
main.py
14
main.py
|
|
@ -6,5 +6,15 @@ edb = ExcelDB("./testdata/data.xlsx")
|
||||||
# edb.create_tables([TestModel, Test1Model])
|
# edb.create_tables([TestModel, Test1Model])
|
||||||
|
|
||||||
TestModel.Meta.database = edb
|
TestModel.Meta.database = edb
|
||||||
test1 = TestModel(username='Cool Hacker', datum='2023-11-12')
|
# test1 = TestModel(username='Cool Hacker', datum='2023-11-12', test="Alex")
|
||||||
test1.create()
|
# test1.create()
|
||||||
|
#test1.delete()
|
||||||
|
# test1.username = "Very cool Hacker"
|
||||||
|
|
||||||
|
|
||||||
|
Test1Model.Meta.database = edb
|
||||||
|
Test1Model(username="Natusik", nickname='Barabusik', creater='Alex').create()
|
||||||
|
|
||||||
|
for t1 in edb.read(Test1Model):
|
||||||
|
print(t1.username, t1.creater)
|
||||||
|
|
||||||
|
|
|
||||||
19
model.py
19
model.py
|
|
@ -13,6 +13,16 @@ class BaseModel:
|
||||||
self._init(type(self), **params)
|
self._init(type(self), **params)
|
||||||
|
|
||||||
_column = None
|
_column = None
|
||||||
|
offset_rows = 0
|
||||||
|
offset_cols = 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def row(self):
|
||||||
|
return self._row
|
||||||
|
|
||||||
|
@row.setter
|
||||||
|
def row(self, idx):
|
||||||
|
self._row = idx
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_column(cls):
|
def get_column(cls):
|
||||||
|
|
@ -26,12 +36,15 @@ class BaseModel:
|
||||||
def get_by_id(cls, id):
|
def get_by_id(cls, id):
|
||||||
return "GET " + str(id)
|
return "GET " + str(id)
|
||||||
|
|
||||||
def save(self):
|
|
||||||
self.Meta.database.save(self)
|
|
||||||
|
|
||||||
def create(self):
|
def create(self):
|
||||||
self.Meta.database.create(self)
|
self.Meta.database.create(self)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
self.Meta.database.update(self)
|
||||||
|
|
||||||
|
def delete(self):
|
||||||
|
self.Meta.database.delete(self)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = None
|
database = None
|
||||||
|
|
||||||
|
|
|
||||||
11
models.py
11
models.py
|
|
@ -16,11 +16,12 @@ class TestModel(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
class Test1Model(BaseModel):
|
class Test1Model(BaseModel):
|
||||||
username = Field('NoName', 1)
|
offset_rows = 9
|
||||||
nickname = Field("anoter name", 2)
|
username = Field('NoName', 5)
|
||||||
datum = Field('datum', 3)
|
nickname = Field("anoter name", 6)
|
||||||
creater = Field('creater', 4)
|
datum = Field('datum', 7)
|
||||||
test = Field('test', 5)
|
creater = Field('creater', 8)
|
||||||
|
test = Field('test', 9)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table = 'NoNames'
|
table = 'NoNames'
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue