Flask/SQLite: Работа с базой данных в Flask

Создание базы данных

Для работы с базой данных, её необходимо создать. Импортируем класс SQLAlchemy из библиотеки flask_sqlalchemy:

from flask_sqlalchemy import SQLAlchemy

Создадим объект db и настроим подключение к базе данных SQLite:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)

sqlite:///blog.db указывает на базу данных SQLite с именем blog.db. Для других баз данных (PostgreSQL, MySQL и др.) следует изменить строку подключения. SQLite выбрана из-за простоты.

Создание модели данных

Создадим класс Article, представляющий таблицу статей:

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    intro = db.Column(db.String(300), nullable=False)
    text = db.Column(db.Text, nullable=False)
    date = db.Column(db.DateTime, default=datetime.utcnow)

    def __repr__(self):
        return f'<Article {self.id}>'

Описание структуры таблицы:

  • id: Уникальный идентификатор статьи (целое число).
  • title: Заголовок статьи (строка, максимум 100 символов, обязательное поле).
  • intro: Вступительный текст (строка, максимум 300 символов, обязательное поле).
  • text: Основной текст статьи (текстовое поле для больших объемов текста).
  • date: Дата публикации (дата и время, по умолчанию — текущее время).
  • __repr__: Метод для удобного представления объекта статьи.

Создание таблицы

Для создания таблицы, в интерактивном режиме Python (запустив python в терминале), выполните:

from app import db
db.create_all()

Это создаст файл blog.db в вашем проекте.

Страница добавления статьи

Создадим URL-адрес /create-article и функцию-обработчик:

@app.route('/create-article', methods=['POST', 'GET'])
def create_article():
    if request.method == 'POST':
        title = request.form['title']
        intro = request.form['intro']
        text = request.form['text']

        article = Article(title=title, intro=intro, text=text)
        try:
            db.session.add(article)
            db.session.commit()
            return redirect('/')
        except:
            return "При добавлении статьи произошла ошибка"
    else:
        return render_template('create-article.html')

В create-article.html разместим форму:

<form method="POST">
    <input type="text" name="title" placeholder="Название статьи" class="form-control"><br>
    <input type="text" name="intro" placeholder="Вступительный текст" class="form-control"><br>
    <textarea name="text" placeholder="Текст статьи" class="form-control"></textarea><br>
    <button type="submit" class="btn btn-success">Отправить</button>
</form>

Отключение предупреждения SQLAlchemy

Для отключения предупреждения SQLAlchemy о deprecated SQLAlchemy.engine.url.make_url в файле app.py добавьте:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

Создан функционал добавления статей в базу данных SQLite с использованием Flask и SQLAlchemy. Пример демонстрирует простой способ работы с базами данных в веб-приложениях на Flask. Функционал можно расширить, добавив отображение, редактирование и удаление статей.

Что будем искать? Например,программа