Приветствую всех.
Начал разбираться в принципах работы с БД Sqlite на Питоне. Перечитал много документации и примеров, но не могу понять такую вещь. Когда мне нужно создавать соединение с БД, создавать курсоры для SQL запросов, и когда нужно всё это закрывать?
Есть условно такой код (Бот в Телеграм):
connection = sqlite3.connect('users_db.sqlite', check_same_thread=False)
bot = telebot.TeleBot('bla-bla')
def create_database():
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users(
t_id TEXT PRIMARY KEY NOT NULL,
username TEXT,
first_name TEXT,
last_name TEXT,
_group TEXT) WITHOUT ROWID""")
connection.commit()
cursor.close()
def get_user_group(user_id):
cursor = connection.cursor()
cursor.execute("""SELECT _group FROM users WHERE t_id=?""", (user_id,))
connection.commit()
user_group = cursor.fetchone()
cursor.close()
if not user_group:
return False
return user_group[0]
def add_or_update_user_to_db(chat, group):
if not get_user_group(chat.id):
cursor = connection.cursor()
cursor.execute("""INSERT INTO users (t_id, username, first_name, last_name, _group) VALUES (?, ?, ?, ?, ?)""",
(chat.id, chat.username, chat.first_name, chat.last_name, group))
connection.commit()
cursor.close()
else:
cursor = connection.cursor()
cursor.execute("""UPDATE users SET _group=? WHERE t_id=?""", (group, chat.id))
connection.commit()
cursor.close()
@bot.message_handler(content_types=["text"])
def main_menu(message):
# тут условно обработка сообщений
if __name__ == '__main__':
create_database()
bot.polling(none_stop=True, interval=2) # бесконечный цикл
Я создал "глобальное" соединение, и во время работы программы его использую, но оно нигде у меня не закрывается.
Так же при каждом обращении к БД создаю новый курсор, делаю запрос, и сразу курсор закрываю.
Есть ли смысл постоянно создавать новые курсоры, или можно создать его рядом с соединением? И правильно ли я сделал, создав одно соединение, которое никак не закрывается? В расчёте, что программа должна крутится всё время без перерывов.
Спасибо.