#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
свойство, которое открывает соединение при первом использовании и кэширует его.