Введение
В этом лабе мы узнаем, как определить и получить доступ к базе данных SQLite с использованием фреймворка Python Flask. Мы настроим базу данных SQLite, установим с ней соединение, создадим таблицы и инициализируем базу данных.
Примечание: вам нужно создать файл кода самостоятельно и запустить его в среде. Вы можете просмотреть статус сервиса Flask на Web 5000.
Настройка базы данных
Во - первых, нам нужно настроить базу данных SQLite для хранения пользователей и постов. SQLite - это удобный выбор, так как он не требует отдельного сервера базы данных и встроен в Python.
В нашем приложении Flask мы создадим соединение с базой данных SQLite. Это соединение обычно связано с запросом в веб - приложениях и закрывается после завершения работы.
Соединение устанавливается с использованием функции sqlite3.connect, и мы используем специальный объект Flask g для хранения и повторного использования соединения.
Создайте новый файл Python db.py и добавьте следующий код:
## flaskr/db.py
import sqlite3
from flask import current_app, g
def get_db():
## Проверьте, есть ли 'db' в 'g'
if 'db' not in g:
## Установите соединение с базой данных
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
## Возвращайте строки, которые ведут себя как словари
g.db.row_factory = sqlite3.Row
return g.db
def close_db(e=None):
## Удалите 'db' из 'g' и закройте соединение, если оно существует
db = g.pop('db', None)
if db is not None:
db.close()
Создание таблиц
В SQLite данные хранятся в таблицах и столбцах. Мы должны создать их, прежде чем сможем хранить и получать данные. Наше приложение будет хранить пользователей в таблице user и посты в таблице post.
Создайте новый SQL - файл schema.sql и добавьте следующий код:
## flaskr/schema.sql
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);
Инициализация базы данных
Далее мы добавим Python - функции, которые будут выполнять SQL - команды для создания таблиц. Добавьте следующие функции в файл db.py:
## flaskr/db.py
def init_db():
db = get_db()
with current_app.open_resource('schema.sql') as f:
db.executescript(f.read().decode('utf8'))
@click.command('init-db')
def init_db_command():
"""Clear the existing data and create new tables."""
init_db()
click.echo('Initialized the database.')
Регистрация в приложении
Функции close_db и init_db_command должны быть зарегистрированы с экземпляром приложения, чтобы приложение могло ими пользоваться. Поскольку мы используем фабричную функцию, мы напишем функцию, которая принимает приложение и выполняет регистрацию.
Добавьте следующую функцию в файл db.py:
## flaskr/db.py
def init_app(app):
app.teardown_appcontext(close_db)
app.cli.add_command(init_db_command)
Затем импортируйте и вызовите эту функцию из фабрики. Добавьте следующий код в файл __init__.py:
## flaskr/__init__.py
def create_app():
app =...
## существующий код опущен
from. import db
db.init_app(app)
return app
Инициализация файла базы данных
Теперь, когда init - db зарегистрировано в приложении, его можно вызвать с использованием команды flask.
Запустите команду init - db:
flask --app flaskr init-db
Initialized the database.
Резюме
В этом практическом занятии мы научились определять и обращаться к базе данных SQLite с использованием Python Flask - фреймворка. Мы создали соединение с базой данных, создали таблицы и проинициализировали базу данных. Это фундаментально для любого веб - приложения, которое должно хранить и получать данные из базы данных.