Поле CIDR
Тип CIDR в SQLAlchemy представляет поле для хранения сетей в нотации CIDR (Classless Inter-Domain Routing). Он доступен в диалекте PostgreSQL и позволяет хранить IP-сети, например 192.168.0.0/24. Первым параметром можно передать имя типа, а также различные опции, такие как collation или default.
Синтаксис
CIDR()
Пример
Давайте создадим модель с полем типа CIDR и посмотрим, как она выглядит:
from sqlalchemy import create_engine, CIDR
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
network: Mapped[str] = mapped_column(CIDR)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print(Article.__table__.c.network.type)
Результат выполнения кода:
CIDR()
Пример
Давайте создадим объект модели и сохраним сеть в поле CIDR:
<+python+>
from sqlalchemy import create_engine, CIDR
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]
network: Mapped[str] = mapped_column(CIDR)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', network='192.168.0.0/24')
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.network)
<-python+>
Результат выполнения кода:
"192.168.0.0/24"