Framework для python Flask - Использование SQLite 3 с Flask

Framework для python Flask - Использование SQLite 3 с Flask
На чтение
28 мин.
Просмотров
31
Дата обновления
09.03.2025
Старт:21.10.2024
Срок обучения:9 мес.
Python-разработчик
Практический онлайн-курс, на котором вы с нуля изучите самый универсальный и востребованный язык программирования — Python. Создадите свое портфолио разработчика, которое выгодно покажет вас на рынке труда, и сможете зарабатывать в IT через полгода.
136 000 ₽340 000 ₽
11 333₽/мес рассрочка
Подробнее

Для интеграции SQLite 3 с Flask вам потребуется подключение к базе данных, создание таблиц и, естественно, работа с данными.

Шаг 1: Подключение к SQLite 3. Используйте модуль sqlite3. Пример кода для подключения к базе данных:

import sqlite3
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()

Замените 'your_database.db' на имя вашего файла базы данных. Это важно для правильной работы.

Шаг 2: Создание таблиц. Создайте структуру таблицы:

cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY,
username TEXT,
email TEXT)''')

Этот код создаёт таблицу users с полями id, username и email.

Шаг 3: Вставка данных. Пример вставки данных в таблицу:

cursor.execute("INSERT INTO users (username, email) VALUES (?, ?)", ('John Doe', 'john.doe@example.com'))
conn.commit()

Ключевая рекомендация: Правильное подключение к базе данных, создание таблиц и вставка данных – базовые, но критически важные шаги в работе с SQLite 3 и Flask. Понимание этих этапов обеспечит стабильную и эффективную работу с базой данных.

Framework для Python Flask - Использование SQLite 3 с Flask

Для работы с SQLite 3 в Flask не нужно устанавливать дополнительные пакеты. SQLite 3 – встроенная база данных, доступная напрямую из Python.

Шаг 1. Импорт библиотеки:

from flask import Flask, request, render_template

import sqlite3

Шаг 2. Создание приложения Flask и подключение к базе данных:

app = Flask(__name__)

conn = sqlite3.connect('your_database.db')

(Замените 'your_database.db' на имя вашего файла базы данных.)

cursor = conn.cursor()

Шаг 3. Создание таблицы (при необходимости).

cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)''')

Шаг 4. Добавление данных (пример):

cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('John Doe', 'john.doe@example.com'))

conn.commit()

Шаг 5. Чтение данных (пример):

cursor.execute("SELECT * FROM users")

rows = cursor.fetchall()

Шаг 6. Закрытие соединения:**

conn.close()

Пример использования в шаблоне Jinja2:

@app.route('/')

def index():

conn = sqlite3.connect('your_database.db')

cursor = conn.cursor()

cursor.execute("SELECT * FROM users")

users = cursor.fetchall()

conn.close()

return render_template('index.html', users=users)

Обратите внимание: Обеспечивайте обработку ошибок (например, исключения sqlite3.Error).

Установка SQLite 3 и Flask

Для работы Flask с SQLite 3, вам не нужно устанавливать что-то особое, помимо самого Flask. SQLite 3 уже встроен в Python.

Установка Flask:

Используйте pip:

pip install Flask

Это установит Flask. Проверка установки:

python -c "import flask; print(flask.__version__)"

Пример использования (без установки SQLite):

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello, World!"
if __name__ == "__main__":
app.run(debug=True)

Этот код создаёт минимальный Flask веб-сервер. Для работы с базой данных вам нужно будет добавить её подключение и использование.

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

Для работы с SQLite 3 в Flask используйте команду Flask-SQLAlchemy. Она упрощает взаимодействие с базой данных.

Создаем приложение Flask:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)

Этот код настраивает Flask с подключением к файлу mydatabase.db. Файл будет создан автоматически, если не существует.

Определяем модель данных:

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f''

Это определяет таблицу User с полями id (ключ), username и email. Обратите внимание на использование db.Column для определения полей и установку unique=True для гарантии уникальности e-mail адресов.

Создаём таблицы:

# Важно: выполняем этот код *после* определения модели!
db.create_all()

Команда db.create_all() создаст таблицу User в базе данных. Выполняйте её *только* после определения модели.

Добавление, чтение, обновление и удаление данных (CRUD)

Для работы со SQLite3 в Flask используйте подход, основанный на ORM (Object-Relational Mapper) - например, SQLAlchemy.

Добавление (Create):

Пример: Добавление новой записи в таблицу "users":


from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f''
@app.route('/add_user', methods=['POST'])
def add_user():
data = request.get_json()
new_user = User(name=data['name'], email=data['email'])
db.session.add(new_user)
db.session.commit()
return 'Пользователь добавлен'

Обращайте внимание на методы работы с базой данных - db.session.add(...) и db.session.commit().

Чтение (Read):

Пример: Чтение всех пользователей:


@app.route('/users')
def get_users():
users = User.query.all()
user_list = [{'id': user.id, 'name': user.name, 'email': user.email} for user in users]
return jsonify(user_list)

Используйте User.query.all() для получения всех данных. jsonify() для представления данных в JSON.

Обновление (Update):

Пример: Обновление имени пользователя:


@app.route('/update_user/', methods=['PUT'])
def update_user(user_id):
user = User.query.get(user_id)
if user:
data = request.get_json()
user.name = data['name']
db.session.commit()
return 'Пользователь обновлен'
else:
return 'Пользователь не найден'

Удаление (Delete):

Пример: Удаление пользователя:


@app.route('/delete_user/', methods=['DELETE'])
def delete_user(user_id):
user = User.query.get(user_id)
if user:
db.session.delete(user)
db.session.commit()
return 'Пользователь удален'
else:
return 'Пользователь не найден'

Обращайте внимание на обработку ошибок (пользователь не найден).

Обработка данных и формирование отчетов

Для формирования отчетов используйте SQLAlchemy. Она позволяет строить запросы к базе данных, преобразовывать данные в удобный формат для отображения. Например:

Пример запроса для выборки данных о пользователях:


from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=False)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return f''
@app.route('/')
def index():
users = User.query.all()  # Получаем всех пользователей
return render_template('index.html', users=users)
if __name__ == '__main__':
db.create_all() # Создаем таблицу (если нет)
app.run(debug=True)

Этот код использует SQLAlchemy для получения всех пользователей из базы. Результат - список объектов User. Его необходимо отформатировать в index.html.

Пример представления данных в шаблоне (index.html):





Пользователи



{% for user in users %}

{% endfor %}
Имя Email
{{ user.name }} {{ user.email }}

Здесь шаблон представляет данные, полученные из SQL, в виде таблицы. Подстановка значений происходит через {{ ... }}.

Для формирования сложных отчетов используйте библиотеки для Python, такие как Pandas, чтобы добавить фильтрацию, сортировку и агрегацию данных. Не забудьте оптимизировать запросы к базе данных.

Обработка ошибок и безопасность

Ключевой аспект работы с базами данных – надежная обработка ошибок. При работе с SQLite 3 в Flask используйте try-except блоки для всех операций с базой данных.

Код Описание

python

try:

with app.app_context():

db.execute("SELECT * FROM users")

# Дальнейшие операции

except sqlite3.Error as e:

print(f"Ошибка в базе данных: {e}")

abort(500)

Обработка возможных ошибок при взаимодействии с базой данных. При возникновении исключения (например, отсутствие таблицы) - возвращает ошибку 500 клиенту.

Защита от SQL-инъекций – критически важна. Никогда не конкатенируйте пользовательский ввод напрямую в SQL-запросы. Используйте параметры:

Небезопасно Безопасно

python

user_input = request.args.get('name')

query = f"SELECT * FROM users WHERE name = '{user_input}'"

python

user_input = request.args.get('name')

query = "SELECT * FROM users WHERE name = ?"

db.execute(query, (user_input,))

Используйте подготовленные запросы (placeholders) для параметров, передаваемых в базу данных. В примере выше, db.execute(query, (user_input,)), демонстрирует безопасную передачу входных данных. Это блокирует возможность SQL-инъекций.

Важное замечание: Всегда используйте проверку типов входных данных от пользователя. Преобразование строк в целочисленные или другие типы данных, прежде чем передавать в базу, может предотвратить нежелательные действия и ошибки.

Использование Flask-SQLAlchemy (Дополнительный раздел)

Для работы с базами данных в Flask рекомендуется использовать Flask-SQLAlchemy. Он позволяет работать с данными через объектно-ориентированный подход. Это упрощает взаимодействие с БД.

Установка:

  • pip install Flask-SQLAlchemy

Создание модели:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '' % self.username

Добавление записей:

user = User(username='john_doe', email='john@example.com')
db.session.add(user)
db.session.commit()

Получение данных:

  • Все пользователи: users = User.query.all()
  • Пользователь по ID: user = User.query.get(1)
  • Все пользователи с определенным email: users = User.query.filter_by(email='example@test.com').all()

Обработка изменений: Не забывайте о db.session.commit() для сохранения изменений в базе данных.

Взаимодействие с другими моделями (множественные связи): Flask-SQLAlchemy позволяет легко описывать связи между таблицами. Пример:

class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', backref='posts')

Здесь user_id устанавливает связь с моделью User. db.relationship позволяет обращаться к связанным записям.

Вопрос-ответ:

Как правильно настроить SQLite 3 с Flask, чтобы данные сохранялись в базе?

Для работы с SQLite 3 в Flask нужно подключить соответствующий модуль. Обычно это делается через библиотеку `sqlite3`. Сам процесс настраивается в несколько шагов. Сначала импортируете необходимые компоненты. Затем в файле, где вы обрабатываете запросы к БД (например, `app.py`), создаёте соединение с базой данных. Важно указать полный путь к файлу базы данных. После этого можно писать SQL-запросы для вставки, обновления, или извлечения данных. Для предотвращения ошибок важно всегда закрывать сессию с базой данных, когда работа закончена. В коде очень важна обработка исключений (`try...except`), чтобы приложение не падало при ошибках в базе данных. Хороший пример должен содержать функции для создания таблиц, вставки данных, и чтения из базы. Для лучшей организации и безопасности рекомендуется изолировать код работы с базой данных в отдельные функции или классы.

Какие основные SQL запросы необходимы для CRUD операций с данными в SQLite 3 через Flask?

Для создания, чтения, обновления и удаления (CRUD) данных в SQLite 3 через Flask, вам потребуются SQL-запросы разного типа. Для создания таблицы необходимо использовать оператор `CREATE TABLE`. Для вставки данных в таблицу используется оператор `INSERT INTO`. Чтение данных производится через оператор `SELECT`. Для обновления данных применяется оператор `UPDATE`, а для удаления – `DELETE`. Важно понимать, что синтаксис этих запросов зависит от структуры вашей таблицы и необходимо использовать соответствующие значения. Хорошая практика - предварительно спроектировать схему вашей базы данных и определить поля, тип данных и ограничения для каждого из них. Также обратите внимание на подготовленные запросы (parameterized queries), которые защищают от SQL-инъекций.

Могу ли я использовать Flask-SQLAlchemy для работы с SQLite 3?

Да, вы можете использовать Flask-SQLAlchemy для работы с SQLite 3. Эта библиотека предоставляет удобный объектно-реляционный маппер (ORM), который позволяет взаимодействовать с базой данных посредством Python-объектов, что упрощает код и делает его более читабельным. Однако, есть один нюанс — Flask-SQLAlchemy по умолчанию работает с другими системами баз данных, например PostgreSQL. Для работы с SQLite 3 нужно указать это в настройках. Если вы знакомы с ORM, то эта библиотека позволяет абстрагировать детали работы с базой данных, предлагая более Python-ориентированный подход.

Как предотвратить SQL инъекции при работе с SQLite 3 в Flask?

Для предотвращения SQL-инъекций при работе с SQLite 3 в Flask, следует использовать подготовленные запросы. Это гарантирует, что пользовательский ввод не будет интерпретироваться как часть SQL-кода. Вместо того, чтобы напрямую подставлять данные в строку запроса, необходимо использовать параметры. При использовании подготовленных запросов, база данных обрабатывает пользовательский ввод как данные, а не как команду. Это важно для защиты от вредоносных атак. Важно применять этот подход во всех запросах, где данные приходят из внешних источников (например, от пользователя).

Какие есть альтернативы SQLite 3 для бОльших проектов Flask?

Для проектов Flask, требующих большей масштабируемости, чем предоставляет SQLite 3, существуют лучшие варианты. PostgreSQL, MySQL, или MongoDB – это примеры. SQLite 3 идеально подходит для небольших приложений, где данные хранятся в одном файле. Однако, по мере роста приложения, база данных должна быть способна хранить огромные объемы информации и обрабатывать запросы от многих пользователей одновременно. Выбор альтернативной системы баз данных повышает масштабируемость и производительность приложения. Также существуют особенности каждого типа БД, которые нужно учитывать. Например, MySQL является хорошим вариантом для традиционных веб-приложений, тогда как MongoDB лучше подходит для приложений, которые требуют гибкой структуры данных.

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий

Курсы