Не сохраняется данные в .db

Вопрос заключается в том что когда я хочу добавить новый студент код не сохраняет данные студента в файл .db? Файл .db создался но пустым.. a.save() не работает, там надо сохранять с id... Вот полный код:

    import shelve
    
    class Student():
        path = 'Students'
        def __init__(self, name, age, mark, level, id=None):
            self.name = name
            self.age = age
            self.mark = mark
            self.level = level
            self.id = id
        
        @property
        def name(self):
            return self.__name
    
        @name.setter
        def name(self, name):
            if isinstance(name,str) and name.isalpha():
                self.__name = name
            else:
                self.__name = "Ne pravilno"
        
        @property
        def age(self):
            return self.__age
        
        @age.setter
        def age(self, age):
            if isinstance(age, int) and age > 0 and age < 120:
                self.__age = age
            else:
                self.__age = 0
        
        @property
        def mark(self):
            return self.__mark
        
        @mark.setter
        def mark(self, mark):
            if isinstance(mark, int) and mark > 0 and mark < 10:
                self.__mark = mark
            else:
                self.__mark = 0
    
        @property
        def level(self):
            return self.__level
        
        @level.setter
        def level(self, level):
            if isinstance(level, int) and level > 0 and level < 5:
                self.__level = level
            else:
                self.__level = 0
        
        def save(self):
            with shelve.open(Student.path) as students:
                keys = list(students.keys())
                if len(keys) > 0:
                    id = int(keys[-1]) + 1
                    students[str(id)] = self
                else:
                    id = 1
                self.id = str(id)
        
        def update(self):
            with shelve.open(Student.path) as students:
                students[self.id] = self
    
        def objects():
            objs = []
            with shelve.open(Student.path) as students:
                for item in students.values():
                    objs.append(item)
            return objs
        
        def get_by_id(id):
            with shelve.open(Student.path) as students:
               return students[id]
                
        def __str__(self) -> str:
            return f'{self.id} {self.name} {self.age} {self.mark} {self.level}'
    
    
    def printList():
        for student in Student.objects():
            print(student)
    
    def Filtr():
        print("       Filter      ")
        print("1.Name")
        print("2.Level")
        print("3.Age")
        print("4.Mark")
        n = int(input("Answer: "))
    
        lpeopl = []
        if n > 0 and n <= 4:
            if n == 1:
                n = input("Vvedite pervuyu bukvu imeni: ")
                
                for item in Student.objects():
                    if item.name.startswith(n):
                        lpeopl.append(item)
    
                if len(lpeopl) != 0:
                    for item in lpeopl:
                        print(item)
    
            elif n == 2:
                n = input("Vvedite level: ")
                for item in Student.objects():
                    if item.level==n:
                       print(item)
                    
                 
            elif n == 3:
                n=int(input("Vvedite vozrast:"))
                for item in Student.objects():
                    if item.age==n:
                        print(item)
            
            elif n == 4:
                n=int(input("Vvedite ball:"))
                for item in Student.objects():
                    if item.mark==n:
                        print(item)
                    
        else:
            print("Shu ikkitadan birini tanlang!")
    
    def menu():
        print("1. Vvesti na ekran spisok studentov")
        print("2. Dobavit noviy student")
        print("3. Filter studentov")
        javob = int(input("Otvet: "))
        if javob == 1:
            printList()
        elif javob == 2:
            ism = input("Student ismini kiriting: ")
            age = int(input("Yoshni kiriting: "))
            mark = int(input("Bahoni kiriting: "))
            level = int(input("Level kiriting: "))
            a = Student(ism, age, mark, level)
            a.save()
            printList()
        elif javob == 3:
            Filtr()
menu()

Ответы (1 шт):

Автор решения: MRX
elif javob == 2:
    ism = input("Student ismini kiriting: ")
    age = int(input("Yoshni kiriting: "))
    mark = int(input("Bahoni kiriting: "))
    level = int(input("Level kiriting: "))
    a = Student(ism, age, mark, level)
    a.save()
    printList()

Тут я забыл после a.save() добавить a.update() Всем спасибо за то что обращали внимание. Вопрос решен.

→ Ссылка