РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
373 of 711 menu

Поле JSON

Тип JSON в SQLAlchemy представляет поле для хранения данных в формате JSON. Он позволяет сохранять в базе данных словари, списки, строки, числа и логические значения, а при чтении автоматически преобразует их в соответствующие объекты Python.

Поле принимает значения в виде Python-объектов, которые сериализуются в JSON при записи и десериализуются обратно при чтении. Тип JSON поддерживается большинством современных СУБД, включая PostgreSQL, MySQL и SQLite.

Синтаксис

from sqlalchemy import JSON column = mapped_column(JSON)

Пример

Давайте создадим модель с полем JSON и сохраним в нее словарь:

from sqlalchemy import create_engine, JSON from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] data: Mapped[dict] = mapped_column(JSON) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', data={'status': 'published', 'num': 10} ) session.add(article) session.commit() res = session.query(Article).first() print(res.data)

Результат выполнения кода:

{'status': 'published', 'num': 10}

Пример

Поле JSON может хранить не только словари, но и списки. Давайте сохраним список строк:

from sqlalchemy import create_engine, JSON from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] tags: Mapped[list] = mapped_column(JSON) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', tags=['sqlalchemy', 'python', 'orm'] ) session.add(article) session.commit() res = session.query(Article).first() print(res.tags)

Результат выполнения кода:

['sqlalchemy', 'python', 'orm']

Пример

Давайте обратимся к отдельному ключу JSON-поля после его загрузки из базы данных:

from sqlalchemy import create_engine, JSON from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] data: Mapped[dict] = mapped_column(JSON) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', data={'status': 'draft', 'num': 5} ) session.add(article) session.commit() res = session.query(Article).first() print(res.data['status']) print(res.data['num'])

Результат выполнения кода:

draft 5

Смотрите также

  • тип JSONB,
    который хранит JSON в бинарном формате PostgreSQL
  • тип ARRAY,
    который хранит массивы значений
  • тип Text,
    который хранит длинные текстовые строки
  • тип PickleType,
    который хранит произвольные Python-объекты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить