import sqlite3 db_name = 'mydb.db' class User: def __init__(self,name,email,age): self.__id = None 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('Неправильно указан возраст') def save(self): conn = sqlite3.connect(db_name) cursor = conn.cursor() property_list = [f"{k}" for k, v in User.__dict__.items() if isinstance(v, property)] if '_User__id' in self.__dict__.keys(): 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 {User.__name__} SET {update_string} WHERE id = ?" print(query,update_values) else: property_count = ('?,'*len(property_list))[:-1] #','.join(['?' for _ in range(len(property_list))]) property_names = ','.join(property_list) property_values = [getattr(self,p) for p in property_list] query = f"INSERT INTO {User.__name__}({property_names}) VALUES({property_count})" print(query,property_values) cursor.execute(query,property_values) conn.commit() self.__id = cursor.lastrowid conn.close() #print(User.__dict__) user1 = User('Igor','igor@example.com',44) user1.save() user1.age = 55 user1.save()