Настройка базы данных SQLite с использованием Python Flask

FlaskFlaskBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе мы узнаем, как определить и получить доступ к базе данных SQLite с использованием фреймворка Python Flask. Мы настроим базу данных SQLite, установим с ней соединение, создадим таблицы и инициализируем базу данных.

Примечание: вам нужно создать файл кода самостоятельно и запустить его в среде. Вы можете просмотреть статус сервиса Flask на Web 5000.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL flask(("Flask")) -.-> flask/CoreConceptsGroup(["Core Concepts"]) flask(("Flask")) -.-> flask/DevelopmentToolsGroup(["Development Tools"]) flask(("Flask")) -.-> flask/DataHandlingGroup(["Data Handling"]) flask/DataHandlingGroup -.-> flask/incoming_request_data("Incoming Request Data") flask/DataHandlingGroup -.-> flask/application_globals("Application Globals") flask/DataHandlingGroup -.-> flask/response_objects("Response Objects") flask/CoreConceptsGroup -.-> flask/application_object("Application Object") flask/CoreConceptsGroup -.-> flask/sessions("Sessions") flask/CoreConceptsGroup -.-> flask/session_interface("Session Interface") flask/CoreConceptsGroup -.-> flask/useful_internals("Useful Internals") flask/DevelopmentToolsGroup -.-> flask/blueprint_objects("Blueprint Objects") flask/DevelopmentToolsGroup -.-> flask/command_line_interface("Command Line Interface") subgraph Lab Skills flask/incoming_request_data -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/application_globals -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/response_objects -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/application_object -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/sessions -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/session_interface -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/useful_internals -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/blueprint_objects -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} flask/command_line_interface -.-> lab-136336{{"Настройка базы данных SQLite с использованием Python Flask"}} end

Настройка базы данных

Во - первых, нам нужно настроить базу данных 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 - фреймворка. Мы создали соединение с базой данных, создали таблицы и проинициализировали базу данных. Это фундаментально для любого веб - приложения, которое должно хранить и получать данные из базы данных.