Ответ
Интеграция 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() Ответ 18+ 🔞
Ах ты ж ёпта, ну и тема подкинули! Слушай, тут про интеграцию Flask с базами данных, а это, блядь, как три дороги в сказке — налево пойдёшь, направо пойдёшь, прямо пойдёшь... И везде, сука, свои подводные ебли!
1. ORM — это типа как переводчик с языка таблиц на человеческий
Для реляционных баз (PostgreSQL, MySQL, SQLite) берут обычно эту штуку. Вместо того чтобы вручную SQL-запросы строить, ты работаешь с таблицами как с обычными питоновскими классами. Красота, блядь!
- Flask-SQLAlchemy — это, сука, царь и бог в этом деле. Обёртка над SQLAlchemy, которая делает всё почти магически.
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 — тут уже документы, а не таблицы
Если твоя база — это не аккуратные столбики, а свалка JSON'ов в лице MongoDB, то тут свои приблуды. ODM вместо ORM, но суть та же — общаться с базой через объекты.
- Flask-MongoEngine — прикручивает MongoEngine к Flask. Определяешь структуру документа классом и вперёд.
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) и пишешь запросы руками. Главное тут — не накосячить с открытыми соединениями, а то сервер ляжет, и будет тебе пиздец, а не приложение.
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() # Обязательно закрывай за собой, а то мамка ругаться будет!
Вот и вся магия, ёпта. Выбирай, что по душе, но помни: с великой силой приходит и великая, блядь, ответственность не наебаться с коннектами!