Поле INET
Тип INET предназначен для хранения IP-адресов
(IPv4 и IPv6) в базе данных. Он доступен
в диалекте PostgreSQL и опирается на нативный
тип INET этой СУБД. При работе с другими
СУБД тип эмулируется как строка. Значение можно
передавать как строку с адресом, например
'127.0.0.1' или '::1'.
Синтаксис
from sqlalchemy import INET
column = Column(INET)
Пример
Давайте создадим таблицу с полем типа
INET и вставим в нее IP-адрес:
from sqlalchemy import create_engine, MetaData, Table, Column
from sqlalchemy import Integer, String, INET
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('ip', INET)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(
articles.insert().values(
id=1, title='article', ip='127.0.0.1'
)
)
conn.commit()
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article', '127.0.0.1')]
Пример
Давайте сохраним IPv6-адрес в поле типа
INET:
from sqlalchemy import create_engine, MetaData, Table, Column
from sqlalchemy import Integer, String, INET
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('ip', INET)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(
articles.insert().values(
id=1, title='article', ip='::1'
)
)
conn.commit()
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article', '::1')]
Пример
Давайте используем тип INET в
декларативной модели:
from sqlalchemy import create_engine, Integer, String, INET
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
ip: Mapped[str] = mapped_column(INET)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(id=1, title='article', ip='192.168.0.1')
session.add(article)
session.commit()
res = session.query(Article).all()
for row in res:
print(row.id, row.title, row.ip)
Результат выполнения кода:
1 article 192.168.0.1