Плохая практика использовать @property в качестве db.cursor?

#python #sqlite #oop

#python #sqlite #ооп

Вопрос:

Главный вопрос: нормально ли, что я не выполняю никаких операций и вообще не закрываю db?

     @property
    def cursor(self):
        return sqlite3.connect('info.db').cursor()

    @property
    def weapon(self):
        weapon = self.cursor.execute(f'SELECT weapon FROM {self.name};').fetchone()[0]
        if weapon is not None:
            return Item.from_id(weapon) # ignore this function
    @weapon.setter
    def weapon(self, value):
        if self.weapon is not None:
            self.cursor.execute(f'INSERT INTO {self.name} (inventory) VALUES (?);',
                                (self.weapon.id,)) # ignore this attribute
        self.cursor.execute(f'UPDATE {self.name} SET weapon = (?) WHERE rowid = 1;', (value,))
 

Комментарии:

1. Это не сработает, если вам нужно повторно использовать один и тот же курсор, например, когда вы перебираете результаты с помощью cursor.fetch()

2. Я знаю это, это единственная проблема?

3. Создание нового подключения к БД для каждого запроса также кажется чрезмерным. Я предлагаю открыть соединение один раз в __init__() методе или, может быть, создать conn свойство, которое открывает соединение при первом использовании и кэширует его.