Ответ
Интеграция Flask с базами данных обычно выполняется одним из трех основных способов, в зависимости от типа БД и уровня абстракции.
1. Использование ORM (Object-Relational Mapping)
Это самый распространенный подход для реляционных СУБД (PostgreSQL, MySQL, SQLite). Он позволяет работать с таблицами базы данных как с Python-классами.
- Flask-SQLAlchemy — самое популярное расширение, которое интегрирует мощную библиотеку 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)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
# Для управления миграциями схемы используется Flask-Migrate (на базе Alembic)
2. Работа с NoSQL базами данных
Для документо-ориентированных баз, таких как MongoDB, используются специализированные библиотеки (ODM - Object-Document Mapper).
- Flask-MongoEngine — обеспечивает интеграцию с MongoEngine, позволяя определять схемы документов в виде классов.
from flask import Flask
from flask_mongoengine import MongoEngine
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'db': 'mytumblelog',
'host': 'localhost',
'port': 27017
}
db = MongoEngine(app)
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_length=50)
3. Прямые SQL-запросы
Для полного контроля можно использовать драйверы баз данных напрямую (например, psycopg2
для PostgreSQL). В этом подходе важно правильно управлять жизненным циклом соединения в контексте запроса Flask.
import psycopg2
from flask import g
def get_db():
# Используем глобальный объект g для хранения соединения в рамках одного запроса
if 'db' not in g:
g.db = psycopg2.connect("dbname=test user=postgres")
return g.db
@app.teardown_appcontext
def close_db(e=None):
db = g.pop('db', None)
if db is not None:
db.close()