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

Атрибут server_default

Атрибут server_default класса Column задает значение по умолчанию, которое подставляется на стороне сервера базы данных. В отличие от атрибута default, значение server_default вычисляется самой СУБД, а не Python-кодом. В качестве значения можно передавать строку SQL-выражения, объект text или функцию func.

Синтаксис

Column(..., server_default=value)

Пример

Давайте создадим таблицу articles со столбцом status, у которого серверное значение по умолчанию равно строке 'article':

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) status = Column(String, server_default='article') engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with engine.connect() as conn: conn.execute( Article.__table__.insert().values(title='sqlite') ) res = conn.execute( Article.__table__.select() ).fetchall() print(res)

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

[(1, 'sqlite', 'article')]

Пример

Давайте передадим серверное значение по умолчанию через объект text с произвольным SQL-выражением:

from sqlalchemy import create_engine, Column, Integer, String, text from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) num = Column(Integer, server_default=text('42')) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with engine.connect() as conn: conn.execute( Article.__table__.insert().values(title='sqlite') ) res = conn.execute( Article.__table__.select() ).fetchall() print(res)

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

[(1, 'sqlite', 42)]

Пример

Давайте используем функцию func, чтобы сервер сам подставил текущее время через SQL-функцию CURRENT_TIMESTAMP:

from sqlalchemy import create_engine, Column, Integer, String, DateTime, func from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) status = Column(String, server_default=func.current_timestamp()) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with engine.connect() as conn: conn.execute( Article.__table__.insert().values(title='user') ) res = conn.execute( Article.__table__.select() ).fetchall() print(res)

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

[(1, 'user', '2024-01-01 00:00:00')]

Пример

Давайте посмотрим на итоговый SQL-запрос, который генерируется при создании таблицы с атрибутом server_default:

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import DeclarativeBase from sqlalchemy.schema import CreateTable class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) status = Column(String, server_default='article') engine = create_engine('sqlite:///:memory:') print(CreateTable(Article.__table__).compile(engine))

Итоговый SQL запрос:

CREATE TABLE articles ( id INTEGER NOT NULL, title VARCHAR, status VARCHAR DEFAULT 'article', PRIMARY KEY (id) )

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

  • класс Column,
    который представляет столбец таблицы
  • атрибут default,
    который задает Python-значение по умолчанию
  • атрибут nullable,
    который определяет допустимость NULL
  • атрибут onupdate,
    который задает значение при обновлении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить