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

Атрибут nullable класса Column

Атрибут nullable класса Column определяет, может ли столбец базы данных содержать значение NULL. Принимает булево значение: True разрешает необязательное значение, а False запрещает его. По умолчанию атрибут равен True, однако для столбцов с primary_key=True он автоматически становится False.

Синтаксис

Column(nullable=True)

Пример

Давайте создадим таблицу articles, где столбец title обязателен для заполнения, а столбец text может быть пустым:

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, nullable=False) text = Column(String, nullable=True) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) print(Article.__table__.c.title.nullable) print(Article.__table__.c.text.nullable)

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

False True

Пример

Давайте убедимся, что столбец с nullable=False не принимает значение None при вставке данных:

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import DeclarativeBase, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String, nullable=False) text = Column(String, nullable=True) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title=None, text='article text')) try: session.commit() except Exception as error: print(type(error).__name__)

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

"IntegrityError"

Пример

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

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, nullable=False) text = Column(String, nullable=True) engine = create_engine('sqlite:///:memory:') print(CreateTable(Article.__table__).compile(engine))

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

CREATE TABLE articles ( id INTEGER NOT NULL, title VARCHAR NOT NULL, text VARCHAR, PRIMARY KEY (id) )

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

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