PostgreSQL

Типы данных PostgreSQL и пользовательские конструкции SQL

Как и во всех диалектах SQLAlchemy, все типы UPPERCASE, которые, как известно, действительны в PostgreSQL, импортируются из диалекта верхнего уровня, независимо от того, происходят ли они из sqlalchemy.types или из локального диалекта:

from sqlalchemy.dialects.postgresql import (
    ARRAY,
    BIGINT,
    BIT,
    BOOLEAN,
    BYTEA,
    CHAR,
    CIDR,
    DATE,
    DOUBLE_PRECISION,
    ENUM,
    FLOAT,
    HSTORE,
    INET,
    INTEGER,
    INTERVAL,
    JSON,
    JSONB,
    MACADDR,
    MONEY,
    NUMERIC,
    OID,
    REAL,
    SMALLINT,
    TEXT,
    TIME,
    TIMESTAMP,
    UUID,
    VARCHAR,
    INT4RANGE,
    INT8RANGE,
    NUMRANGE,
    DATERANGE,
    TSRANGE,
    TSTZRANGE,
    TSVECTOR,
)

Ниже перечислены типы, специфичные для PostgreSQL или имеющие специфичные для PostgreSQL аргументы построения:

Типы диапазонов

Новые типы столбцов диапазонов, появившиеся в PostgreSQL 9.2 и далее, обслуживаются следующими типами:

Приведенные выше типы получают большую часть своей функциональности от следующего миксина:

Предупреждение

Поддержка диапазонных типов DDL должна работать с любым драйвером PostgreSQL DBAPI, однако возвращаемые типы данных могут отличаться. Если вы используете psycopg2, рекомендуется перейти на версию 2.5 или более позднюю перед использованием этих типов столбцов.

При инстанцировании моделей, использующих эти типы столбцов, вы должны передавать любой тип данных, ожидаемый драйвером DBAPI, который вы используете для типа столбца. Для psycopg2 это psycopg2.extras.NumericRange, psycopg2.extras.DateRange, psycopg2.extras.DateTimeRange и psycopg2.extras.DateTimeTZRange или класс, который вы зарегистрировали psycopg2.extras.register_range.

Например:

from psycopg2.extras import DateTimeRange
from sqlalchemy.dialects.postgresql import TSRANGE

class RoomBooking(Base):

    __tablename__ = 'room_booking'

    room = Column(Integer(), primary_key=True)
    during = Column(TSRANGE())

booking = RoomBooking(
    room=101,
    during=DateTimeRange(datetime(2013, 3, 23), None)
)

Типы ограничений PostgreSQL

SQLAlchemy поддерживает ограничения PostgreSQL EXCLUDE с помощью класса ExcludeConstraint:

Например:

from sqlalchemy.dialects.postgresql import ExcludeConstraint, TSRANGE


class RoomBooking(Base):

    __tablename__ = "room_booking"

    room = Column(Integer(), primary_key=True)
    during = Column(TSRANGE())

    __table_args__ = (ExcludeConstraint(("room", "="), ("during", "&&")),)

Конструкции DML в PostgreSQL

psycopg2

pg8000

asyncpg

psycopg2cffi

py-postgresql

pygresql

Вернуться на верх