
Лекция.
Работа с базами данных в Flask.
Преподаватель:
Фартышев Дмитрий Александрович

SQLite
SQLite - это компактная и легкая встраиваемая база данных, которая позволяет хранить и управлять данными прямо внутри вашего приложения. Её простота в использовании и широкая поддержка делают её прекрасным выбором для различных проектов, включая веб-приложения, мобильные приложения и многое другое.

SQLite
Высокая скорость работы, так как база данных хранится в одном файле и не требует сетевого взаимодействия или использования процессов-серверов.
Поддержка всех основных операций SQL, таких как SELECT, INSERT, UPDATE и DELETE, а также транзакций и подготовленных запросов.
Поддержка большинства типов данных, включая целые числа, числа с плавающей точкой, строки, даты и времена, NULL и BLOB (binary large objects).

Преимущества использования SQLite
- Простота: SQLite не требует отдельного сервера или настройки. Она работает как часть вашего приложения.
- Надежность: Транзакции и ACID-свойства обеспечивают надежность и целостность данных.
- Кроссплатформенность: SQLite поддерживается на множестве платформ, включая Windows, macOS и Linux.
- Эффективность: Использует минимальные ресурсы системы, что делает её хорошим выбором для мобильных устройств.

Установка SQLite
Чтобы начать работу с SQLite в Python, нам потребуется библиотека sqlite3 . Эта библиотека входит в стандартную библиотеку Python (начиная с версии 2.5), поэтому нам не нужно устанавливать её отдельно. Мы можем начать использовать sqlite3 сразу после установки Python.

Создание новой базы данных
import sqlite3
# Создаем подключение к базе данных (файл my_database.db будет создан)
connection = sqlite3.connect( 'my_database.db' )
connection.close()

Инструмент для работы с SQLite
Для удобной работы с базой данных SQLite, вы можете использовать инструменты, такие как DB Browser for SQLite (или SQLite Studio). Это графический интерфейс, позволяющий просматривать, редактировать и управлять данными в базе SQLite.
DB Browser for SQLite можно скачать с официального сайта: sqlitebrowser.org .

Создание таблиц
import sqlite3
# Устанавливаем соединение с базой данных
connection = sqlite3.connect( 'my_database.db' )
cursor = connection.cursor()
# Создаем таблицу Users
cursor.execute( '''
CREATE TABLE IF NOT EXISTS Users (
id INTEGER PRIMARY KEY,
username TEXT NOT NULL,
email TEXT NOT NULL,
age INTEGER
)
''' )
# Сохраняем изменения и закрываем соединение
connection.commit()
connection.close()

Вставка, обновление и удаление данных
Использование оператора INSERT для добавления данных
cursor.execute( 'INSERT INTO Users (username, email, age) VALUES (?, ?, ?)' , ( 'newuser' , 'newuser@example.com' , 28 ))
Обновление записей с использованием UPDATE
# Обновляем возраст пользователя "newuser"
cursor.execute( 'UPDATE Users SET age = ? WHERE username = ?' , ( 29 , 'newuser' ))
Удаление данных с помощью оператора DELETE
# Удаляем пользователя "newuser"
cursor.execute( 'DELETE FROM Users WHERE username = ?' , ( 'newuser' ,))

Использование SQL-запросов для извлечения данных из таблиц
# Выбираем всех пользователей
cursor.execute( 'SELECT * FROM Users' )
Примеры операторов SELECT, FROM, WHERE
# Выбираем имена и возраст пользователей старше 25 лет
cursor.execute( 'SELECT username, age FROM Users WHERE age ?' , ( 25 ))
Примеры операторов GROUP BY и HAVING
Оператор GROUP BY используется для группировки данных по определенным столбцам. Оператор HAVING применяется к агрегатным функциям, чтобы фильтровать результаты групп.
cursor.execute( 'SELECT age, AVG(age) FROM Users GROUP BY age' )
cursor.execute( 'SELECT age, AVG(age) FROM Users GROUP BY age HAVING AVG(age) ?' , ( 30 ,))

Использование агрегатных функций: COUNT, SUM, AVG, MIN, MAX
COUNT - подсчет количества записей
Функция COUNT используется для подсчета количества записей в столбце или таблице.
cursor.execute( 'SELECT COUNT(*) FROM Users' )
SUM - суммирование числовых значений
Функция SUM вычисляет сумму числовых значений в столбце.
cursor.execute( 'SELECT SUM(age) FROM Users' )
AVG - вычисление среднего значения
cursor.execute( 'SELECT AVG(age) FROM Users' )
MIN - нахождение минимального значения
cursor.execute( 'SELECT MIN(age) FROM Users' )
MAX - нахождение максимального значения
cursor.execute( 'SELECT MAX(age) FROM Users' )

Использование методов fetchone(), fetchmany() и fetchall() для получения данных
# Выбираем первого пользователя
cursor.execute( 'SELECT * FROM Users' )
first_user = cursor.fetchone()
print (first_user)
# Выбираем первых 5 пользователей
cursor.execute( 'SELECT * FROM Users' )
first_five_users = cursor.fetchmany( 5 )
print (first_five_users)
# Выбираем всех пользователей
cursor.execute( 'SELECT * FROM Users' )
all_users = cursor.fetchall()
print (all_users)

Обработка NULL-значений
NULL - это специальное значение, обозначающее отсутствие данных. При обработке NULL-значений, вы можете использовать операторы IS NULL и IS NOT NULL. Например, давайте выберем пользователей с неизвестным возрастом:
import sqlite3
# Устанавливаем соединение с базой данных
connection = sqlite3.connect( 'my_database.db' )
cursor = connection.cursor()
# Выбираем пользователей с неизвестным возрастом
cursor.execute( 'SELECT * FROM Users WHERE age IS NULL' )
unknown_age_users = cursor.fetchall()
# Выводим результаты
for user in unknown_age_users:
print (user)
# Закрываем соединение
connection.close()

Как связать SQLite и Flask
from flask import Flask, render_template, request
import sqlite3
app = Flask(__name__)
………
@app .route( '/participants' )
def participants():
connect = sqlite3.connect( 'database.db' )
cursor = connect.cursor()
…… .