Атрибут 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,
который хранит тип данных столбца