← Назад к вопросам

Что такое модель данных в ORM?

1.0 Junior🔥 151 комментариев
#Опыт и soft skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Модель данных в ORM

ORM (Object-Relational Mapping) — это технология, которая преобразует данные из реляционной БД в объекты программирования. Модель данных в ORM — это класс Python, который представляет таблицу БД, где атрибуты класса соответствуют столбцам таблицы.

Что такое модель?

Модель — это объявление структуры данных, которое содержит:

  • Названия и типы полей
  • Связи между таблицами (relations)
  • Ограничения (constraints)
  • Методы работы с данными

Пример с SQLAlchemy ORM

from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from datetime import datetime

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    
    id = Column(Integer, primary_key=True)
    name = Column(String(100), nullable=False)
    email = Column(String(100), unique=True, nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)
    
    # Связь с другой таблицей
    posts = relationship("Post", back_populates="author")

class Post(Base):
    __tablename__ = "posts"
    
    id = Column(Integer, primary_key=True)
    title = Column(String(200), nullable=False)
    content = Column(String(5000))
    user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)
    
    author = relationship("User", back_populates="posts")

Связи в ORM

One-to-Many (один ко многим):

class Author(Base):
    __tablename__ = "authors"
    id = Column(Integer, primary_key=True)
    books = relationship("Book", back_populates="author")

class Book(Base):
    __tablename__ = "books"
    id = Column(Integer, primary_key=True)
    author_id = Column(Integer, ForeignKey("authors.id"))
    author = relationship("Author", back_populates="books")

Many-to-Many (многие ко многим):

from sqlalchemy import Table

association_table = Table(
    'student_course',
    Base.metadata,
    Column('student_id', Integer, ForeignKey('students.id')),
    Column('course_id', Integer, ForeignKey('courses.id'))
)

class Student(Base):
    __tablename__ = "students"
    id = Column(Integer, primary_key=True)
    name = Column(String(100))
    courses = relationship("Course", secondary=association_table)

class Course(Base):
    __tablename__ = "courses"
    id = Column(Integer, primary_key=True)
    title = Column(String(100))

Использование моделей

from sqlalchemy.orm import Session

# Создание записи
new_user = User(
    name="Alice",
    email="alice@example.com"
)
session.add(new_user)
session.commit()

# Чтение
user = session.query(User).filter(User.email == "alice@example.com").first()

# Обновление
user.name = "Alice Smith"
session.commit()

# Удаление
session.delete(user)
session.commit()

# Работа со связями
posts = user.posts  # Автоматически загружаются связанные посты
for post in posts:
    print(post.title)

Типы полей

from sqlalchemy import String, Integer, Float, Boolean, DateTime, JSON, Enum

class Product(Base):
    __tablename__ = "products"
    
    id = Column(Integer, primary_key=True)
    name = Column(String(100))           # Строка
    price = Column(Float)                # Число с плавающей точкой
    quantity = Column(Integer)           # Целое число
    is_active = Column(Boolean)          # Булево значение
    created_at = Column(DateTime)        # Дата и время
    metadata = Column(JSON)              # JSON
    status = Column(Enum('active', 'inactive'))  # Enum

Миграции и модели

ОRM модели описывают структуру БД в коде, но для реальной базы используются миграции (например, Alembic или Goose), которые создают таблицы на основе моделей.

Преимущества ORM моделей

  1. Объектно-ориентированный подход — работа с объектами вместо SQL
  2. Безопасность от SQL-injection — автоматическое экранирование
  3. Переносимость — одна модель работает с разными БД
  4. Удобство — автоматическое преобразование типов
  5. Отношения — встроенная работа со связями

Вывод: Модель в ORM — это декларативное описание структуры БД на Python, которое обеспечивает удобный и безопасный способ работы с данными в приложении.

Что такое модель данных в ORM? | PrepBro