/
sunchise
/
Test
Обзор
Документация
Войти
/
sunchise
/
Test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/models/base.py
48 строк
2 KB
sunchise
Запрос на слияние 'frontend2' (
#1
) из frontend2 в master
26 мар 2026, 18:24
Верифицирован
26 мар 2026, 18:24
761ae63
Код
Авторство
О чём код?
from sqlalchemy.orm import DeclarativeBase from sqlalchemy import TypeDecorator, Text import json class JSONType(TypeDecorator): """Кастомный тип для хранения Python словарей как JSON в базе данных""" impl = Text cache_ok = True def process_bind_param(self, value, dialect): if value is not None: # Если значение уже строка, возвращаем как есть if isinstance(value, str): return value return json.dumps(value, ensure_ascii=False) return value def process_result_value(self, value, dialect): if value is not None: # Если значение уже словарь, возвращаем как есть if isinstance(value, dict): return value # Если значение строка, пытаемся распарсить как JSON if isinstance(value, str): try: return json.loads(value) except json.JSONDecodeError: # Если не JSON, пытаемся распарсить как Python dict (с одинарными кавычками) try: import ast return ast.literal_eval(value) except: return value return value class Base(DeclarativeBase): """ Базовый класс для всех ORM моделей. SQLAlchemy 2.0+ style с поддержкой type hints. Все модели наследуются от этого класса. Пример использования: class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True) """ pass