import sqlite3 db_name = 'mydb.db' class BaseModel: def __init__(self,id): self.__id = id @classmethod def get_by_id(cls,id): conn = sqlite3.connect(db_name) cursor = conn.cursor() property_list = ['id']+[f"{k}" for k, v in cls.__dict__.items() if isinstance(v, property)] property_string = ','.join(property_list) query = f"SELECT {property_string} FROM {cls.__name__} WHERE id = ?" cursor.execute(query,(id,)) result = cursor.fetchone() property_dict = dict() for index in range(len(property_list)): property_dict[property_list[index]] = result[index] conn.close() return cls(**property_dict) def save(self): conn = sqlite3.connect(db_name) cursor = conn.cursor() property_list = [f"{k}" for k, v in self.__class__.__dict__.items() if isinstance(v, property)] if self.__id != None: update_string = ','.join([f'`{p_name}`= ? ' for p_name in property_list]) update_values = [getattr(self,p) for p in property_list] + [self.__id] query = f"UPDATE {self.__class__.__name__} SET {update_string} WHERE id = ?" print(query,update_values) cursor.execute(query,update_values) conn.commit() else: property_count = ('?,'*len(property_list))[:-1] property_names = ','.join(property_list) property_values = [getattr(self,p) for p in property_list] query = f"INSERT INTO {self.__class__.__name__}({property_names}) VALUES({property_count})" cursor.execute(query,property_values) conn.commit() self.__id = cursor.lastrowid conn.close() class User(BaseModel): def __init__(self,name,email,age,id = None): super().__init__(id) self.__name = name self.__email = email self.__age = age @property def name(self): return self.__name @name.setter def name(self,value): self.__name = value @property def email(self): return self.__email @email.setter def email(self,value): if '@' in value: self.__email = value else: raise ValueError('Не корректный адрес почты') @property def age(self): return self.__age @age.setter def age(self,value): if 0 <= value <= 120: self.__age = value else: raise ValueError('Неправильно указан возраст') class Product(BaseModel): def __init__(self,name,category,price,id=None): super().__init__(id) self.__name = name self.__category = category self.__price = price @property def name(self): return self.__name @property def category(self): return self.__category @property def price(self): return self.__price product1 = Product('Свинина, шея','Мясные продукты',250) product1.save() ''' user2 = User.get_by_id(9) user2.name = 'Andrey' user2.save() user1 = User('Igor','igor@example.com',44) user1.save() user1.age = 55 user1.save() '''