Практика. Базы данных. 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' , '[email protected]' , 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
import sqlite3
# Подключение к базе данных
# Подключение к базе данных
conn = sqlite3.connect('pharmacy.db')
conn = sqlite3.connect('pharmacy.db')
cursor = conn.cursor()
cursor = conn.cursor()
# Создание таблицы medicines
# Запрос на поиск лекарства по названию
medicine_name = input('Введите название препарата: ')
cursor.execute('''CREATE TABLE medicines
cursor.execute('''SELECT * FROM medicines
(name text, manufacturer text, form text, price real)''')
WHERE name=?''', (medicine_name,))
# Заполнение таблицы данными о лекарствах
medicines = [('амоксициллин', 'BPharma', 'капсулы', 265),
# Вывод всех имеющихся записей с найденным лекарством
('амоксициллин', 'Healthy', 'сироп', 250),
rows = cursor.fetchall()
if len(rows) == 0:
('амоксициллин', 'Pharmstandart', 'таблетки', 150),
('амоксициллин', 'Teva', 'ампулы', 350),
print(f'Препарат {medicine_name} не найден')
else:
('аспирин', 'Bayer', 'таблетки', 100),
('аспирин', 'Stada', 'капсулы', 120),
print(f'Найдены записи о препарате {medicine_name}:')
for row in rows:
('аспирин', 'Teva', 'сироп', 190),
('валидол', 'Pharmstandart', 'таблетки', 50),
print(row)
('валидол', 'Stada', 'капсулы', 60),
('валидол', 'Healthy', 'сироп', 70),
# Закрытие базы данных
('валериана', 'BPharma', 'капсулы', 80),
conn.close()
('валериана', '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
Используйте тег таблицы и назначьте заголовок с помощью тега
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 and SQLite
table, th, td {
border:1px solid black;
}
| Name | City | Country | Phone Number | |
|---|---|---|---|---|
| {{participant[0]}} | {{participant[1]}} | {{participant[2]}} | {{participant[3]}} | {{participant[4]}} |
Задача 6 “Flask и sqlite3”
Flask and SQLite
Build Web App Using Flask and SQLite
Fill form to get updates
Check participant list
Flask and SQLite
Enter Name:
Enter Email:
Enter City:
Enter Country:
Enter phone num:
Практика
Создайте страницу сайта с формой, в которую можно будет вводить данные пользователя (имя, электронная почта и т.д.). После отправки формы данные должны сохраняться в базе данных .
Практика
Необходимо установить расширение Flask-WTF, которое позволяет работать с формами в Flask и WTForms, библиотекой для создания форм в Python.
Необходимо создать базу данных, например, с помощью SQLite.
Создать файл app.py и подключить необходимые библиотеки.


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