Презентация "Практика. Работа с базами данных во вреймворке Flask"

  • pptx
  • 15.06.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Тема 14_практика.pptx

Преподаватель: Фартышев Дмитрий Александрович

Практика. Базы данных. SQL.

Задача 1 “Создание новой базы данных и подключение к существующей”

Необходимо подключить к библиотеке sqlite3 и создать базу данных .

import sqlite3

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

connection.close()

Задача 2 “Новая таблица”

Создать в БД таблицу, в которой будем хранить информацию о пользователях id, username. email и age:

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()

Задача 3 “Первая запись”

Внести в нашу созданную таблицу первую запись:

import sqlite3

# Устанавливаем соединение с базой данных
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()

# Добавляем нового пользователя
cursor.execute('INSERT INTO Users (username, email, age) VALUES (?, ?, ?)', ('newuser', 'newuser@example.com', 28))

# Сохраняем изменения и закрываем соединение
connection.commit()
connection.close()

Задача 4 “Фильмы”

Создать БД, создать таблицу с полями название, рейтинг, год, режиссёр, жанр:

import sqlite3

# создание подключения к базе данных
conn = sqlite3.connect('mydb.db')

# создание таблицы movies
conn.execute('''CREATE TABLE movies
(название TEXT,
рейтинг REAL,
год INTEGER,
режиссер TEXT,
жанр TEXT);''')
# подключение к базе данных
conn = sqlite3.connect('mydb.db')

# данные о фильмах
movies_data = [
('Побег из Шоушенка', 9.3, 1994, 'Фрэнк Дарабонт', 'драма'),
('Крестный отец', 9.2, 1972, 'Фрэнсис Форд Коппола', 'драма'),
('Крестный отец 2', 9.0, 1974, 'Фрэнсис Форд Коппола', 'драма'),
('Тёмный рыцарь', 9.0, 2008, 'Кристофер Нолан', 'боевик'),
('12 разгневанных мужчин', 9, 1957, 'Сидни Люмет', 'драма'),
('Список Шиндлера', 9, 1993, 'Стивен Спилберг', 'драма'),
('Властелин колец: Возвращение короля ', 9, 2003, 'Питер Джексон', 'фэнтези'),
('Криминальное чтиво', 8.9, 1994, 'Квентин Тарантино', 'криминал'),
('Хороший, плохой, злой', 8.8, 1966, 'Серджио Леоне', 'вестерн'),
('Бойцовский клуб', 8.8, 1999, 'Дэвид Финчер', 'драма'),
]

# добавление данных в таблицу movies
for movie in movies_data:
conn.execute(f"INSERT INTO movies VALUES ('{movie[0]}', {movie[1]}, {movie[2]}, '{movie[3]}', '{movie[4]}')")

# сохранение изменений и закрытие базы данных
conn.commit()
# закрытие подключения к базе данных
conn.close()

Задача 5 “Лекарства”

Напишите две программы:
Первая создает базу данных pharmacy, в которой хранятся данные о лекарственных препаратах.
Вторая выполняет поиск по БД и выводит все лекарственные формы запрошенного препарата.

import sqlite3

# Подключение к базе данных
conn = sqlite3.connect('pharmacy.db')
cursor = conn.cursor()

# Запрос на поиск лекарства по названию
medicine_name = input('Введите название препарата: ')
cursor.execute('''SELECT * FROM medicines
WHERE name=?''', (medicine_name,))

# Вывод всех имеющихся записей с найденным лекарством
rows = cursor.fetchall()
if len(rows) == 0:
print(f'Препарат {medicine_name} не найден')
else:
print(f'Найдены записи о препарате {medicine_name}:')
for row in rows:
print(row)

# Закрытие базы данных
conn.close()

import sqlite3

# Подключение к базе данных
conn = sqlite3.connect('pharmacy.db')
cursor = conn.cursor()

# Создание таблицы medicines
cursor.execute('''CREATE TABLE medicines
(name text, manufacturer text, form text, price real)''')

# Заполнение таблицы данными о лекарствах
medicines = [('амоксициллин', 'BPharma', 'капсулы', 265),
('амоксициллин', 'Healthy', 'сироп', 250),
('амоксициллин', 'Pharmstandart', 'таблетки', 150),
('амоксициллин', 'Teva', 'ампулы', 350),
('аспирин', 'Bayer', 'таблетки', 100),
('аспирин', 'Stada', 'капсулы', 120),
('аспирин', 'Teva', 'сироп', 190),
('валидол', 'Pharmstandart', 'таблетки', 50),
('валидол', 'Stada', 'капсулы', 60),
('валидол', 'Healthy', 'сироп', 70),
('валериана', 'BPharma', 'капсулы', 80),
('валериана', 'Pharmstandart', 'таблетки', 90),
('валериана', 'Healthy', 'сироп', 100),
('глицин', 'Pharmstandart', 'таблетки', 40),
('глицин', 'BPharma', 'капли', 30),
('диазолин', 'Healthy', 'таблетки', 120),
('диазолин', 'Pharmstandart', 'капсулы', 130),
('диазолин', 'Stada', 'сироп', 140),
('димедрол', 'BPharma', 'таблетки', 50),
('димедрол', 'Healthy', 'капсулы', 60),
('димедрол', 'Pharmstandart', 'сироп', 70),
('димедрол', 'Teva', 'ампулы', 170),
('ибупрофен', 'Bayer', 'таблетки', 80),
('ибупрофен', 'Healthy', 'капсулы', 90),
('ибупрофен', 'Pharmstandart', 'сироп', 100),
('кетонал', 'Teva', 'таблетки', 200),
('кетонал', 'Stada', 'капсулы', 210),
('кетонал', 'BPharma', 'сироп', 220),
('мезим', 'Pharmstandart', 'таблетки', 150),
('мезим', 'Healthy', 'капсулы', 160),
('мезим', 'BPharma', 'сироп', 170),
('нурофен', 'Bayer', 'таблетки', 120),
('нурофен', 'Healthy', 'капсулы', 130),
('нурофен', 'Pharmstandart', 'сироп', 140)]

cursor.executemany('INSERT INTO medicines VALUES (?,?,?,?)', medicines)

# Сохранение изменений и закрытие базы данных
conn.commit()
conn.close()

Задача 6 “Flask и sqlite3”

index.html
Файл index.html будет содержать две кнопки, одна кнопка для проверки всех списков участников (взято из базы данных). И другая кнопка для создания новой записи.

join.html
В файле join.html создайте простую форму, которая принимает имя, адрес электронной почты, город, страну и телефон в качестве входных данных для сохранения в базе данных. Методом POST получите запрос формы всех столбцов и зафиксируйте изменения в базе данных после вставки данных в таблицу.

participants.html
Используйте тег таблицы и назначьте заголовок с помощью тега . Для автоматического увеличения строки таблицы в новой записи используйте шаблон jinja цикла For. Внутри цикла For добавьте теги и .

Задача 6 “Flask и sqlite3”




Flask and SQLite


Build Web App Using Flask and SQLite









Flask and SQLite











{%for participant in data%}







{%endfor%}
Name Email City Country Phone Number
{{participant[0]}} {{participant[1]}} {{participant[2]}} {{participant[3]}} {{participant[4]}}





Flask and SQLite






















from flask import Flask, render_template, request
import sqlite3

app = Flask(__name__)


@app.route('/')
@app.route('/home')
def index():
return render_template('index.html')

connect = sqlite3.connect('database.db')
connect.execute( 'CREATE TABLE IF NOT EXISTS PARTICIPANTS (name TEXT, \
email TEXT, city TEXT, country TEXT, phone TEXT)')

@app.route('/join', methods=['GET', 'POST'])
def join():
if request.method == 'POST':
name = request.form['name']
email = request.form['email']
city = request.form['city']
country = request.form['country']
phone = request.form['phone']

with sqlite3.connect("database.db") as users:
cursor = users.cursor()
cursor.execute("INSERT INTO PARTICIPANTS \
(name,email,city,country,phone) VALUES (?,?,?,?,?)",
(name, email, city, country, phone))
users.commit()
return render_template("index.html")
else:
return render_template('join.html')


@app.route('/participants')
def participants():
connect = sqlite3.connect('database.db')
cursor = connect.cursor()
cursor.execute('SELECT * FROM PARTICIPANTS')
data = cursor.fetchall()
return render_template("participants.html", data=data)


if __name__ == '__main__':
app.run(debug=True)

Практика

Создайте страницу сайта с формой, в которую можно будет вводить данные пользователя (имя, электронная почта и т.д.). После отправки формы данные должны сохраняться в базе данных.

Практика

Необходимо установить расширение Flask-WTF, которое позволяет работать с формами в Flask и WTForms, библиотекой для создания форм в Python.
Необходимо создать базу данных, например, с помощью SQLite.
Создать файл app.py и подключить необходимые библиотеки.