Web - приложение, операции CRUD, коннект с базой данных, как правильно

amv

Новичок
Пользователь
Июн 23, 2020
19
2
3
Новичок. Тренируюсь. Могу путаться в терминах.
Пробую сделать простое приложение, которое выполняет операции CRUD (это слово я узнал благодаря форумчанам, спасибо за науку :)))
Код для выполнения задач строю следующим образом:
1. Web -страница отправляет запрос в приложение на соотв рут
2. В руте выполняются некие действия с базой данных, например (код черновой, без обработки исключений и пр., чисто для примера)
Python:
connection = sqlite3.connect("db/xxl.db")
cursor = connection.cursor()
cursor.execute('INSERT INTO users (username,hash,surname,fname,sname) VALUES (?,?,?,?,?)',(request.form.get("username"),hash,request.form.get("usersurname"),request.form.get("userfirstname"),request.form.get("usersecondname")))
userid = cursor.lastrowid
print(userid)
connection.commit()
connection.close()
3. Ну и куда-то отдается результат (в зависимости от задачи)

То есть каждый раз, когда в рут идет запрос я создаю коннект с базой данных, выполняю над ней какой-то SQL запрос, делаю commit и закрываю соединение до следующего запроса.
Вопросы:
1. Правильно ли я делаю?
2. Возможно ли разместить команду
connection = sqlite3.connect("db/xxl.db")
в области для глобальных переменных приложения, чтобы не делать connect и close при каждом вызове каждого рута, или это бессмыслица по каким-то причинам?
 

Jerry

Пользователь
Пользователь
Июл 28, 2020
29
12
3
Нужно покурить тему connection pool

Вкратце:
Открытие/закрытие соединения с бд при каждом запросе стоит времени и ресурсов.
С другой стороны, чем больше открытых соединений держит база, тем сильнее она нагружена.
Поэтому пулы соединений реализуют алгоритм поддержания N соединений в открытом состоянии и возвращают их по запросу.
При завершении работы с соединением, оно возвращается обратно в пул.
Если соединений в пуле не хватает, создается новое.
Если соединений в пуле выше заданного N, неиспользуемые закрываются.
 

Форум IT Специалистов