PostgreSQL ENUM type. This is a subclass of :class:`_types.Enum` which includes support for PG's ``CREATE TYPE`` and ``DROP TYPE``. When the builtin type :class:`_types.Enum` is used and the :paramref:`.Enum.native_enum` flag is left at its default of True, the PostgreSQL backend will use a :class:`_postgresql.ENUM` type as the implementation, so the special create/drop rules will be used. The create/drop behavior of ENUM is necessarily intricate, due to the awkward relationship the ENUM type has in relationship to the parent table, in that it may be "owned" by just a single table, or may be shared among many tables. When using :class:`_types.Enum` or :class:`_postgresql.ENUM` in an "inline" fashion, the ``CREATE TYPE`` and ``DROP TYPE`` is emitted corresponding to when the :meth:`_schema.Table.create` and :meth:`_schema.Table.drop` methods are called:: table = Table('sometable', metadata, Column('some_enum', ENUM('a', 'b', 'c', name='myenum')) ) table.create(engine) # will emit CREATE ENUM and CREATE TABLE table.drop(engine) # will emit DROP TABLE and DROP ENUM To use a common enumerated type between multiple tables, the best practice is to declare the :class:`_types.Enum` or :class:`_postgresql.ENUM` independently, and associate it with the :class:`_schema.MetaData` object itself:: my_enum = ENUM('a', 'b', 'c', name='myenum', metadata=metadata) t1 = Table('sometable_one', metadata, Column('some_enum', myenum) ) t2 = Table('sometable_two', metadata, Column('some_enum', myenum) ) When this pattern is used, care must still be taken at the level of individual table creates. Emitting CREATE TABLE without also specifying ``checkfirst=True`` will still cause issues:: t1.create(engine) # will fail: no such type 'myenum' If we specify ``checkfirst=True``, the individual table-level create operation will check for the ``ENUM`` and create if not exists:: # will check if enum exists, and emit CREATE TYPE if not t1.create(engine, checkfirst=True) When using a metadata-level ENUM type, the type will always be created and dropped if either the metadata-wide create/drop is called:: metadata.create_all(engine) # will emit CREATE TYPE metadata.drop_all(engine) # will emit DROP TYPE The type can also be created and dropped directly:: my_enum.create(engine) my_enum.drop(engine) .. versionchanged:: 1.0.0 The PostgreSQL :class:`_postgresql.ENUM` type now behaves more strictly with regards to CREATE/DROP. A metadata-level ENUM type will only be created and dropped at the metadata level, not the table level, with the exception of ``table.create(checkfirst=True)``. The ``table.drop()`` call will now emit a DROP TYPE for a table-level enumerated type.
Class Method | __test |
Undocumented |
Class Method | adapt |
Produce a PostgreSQL native :class:`_postgresql.ENUM` from plain :class:`.Enum`. |
Method | __init__ |
Construct an :class:`_postgresql.ENUM`. |
Method | create |
Emit ``CREATE TYPE`` for this :class:`_postgresql.ENUM`. |
Method | drop |
Emit ``DROP TYPE`` for this :class:`_postgresql.ENUM`. |
Method | get |
dont return dbapi.STRING for ENUM in PostgreSQL, since that's a different type |
Class Variable | native |
Undocumented |
Instance Variable | create |
Undocumented |
Inherited from NamedType
:
Class Variable | __abstract__ |
Undocumented |
Class Variable |
|
Undocumented |
Class Variable |
|
Undocumented |
Method | _check |
Look in the 'ddl runner' for 'memos', then note our name in that collection. |
Method | _on |
Undocumented |
Method | _on |
Undocumented |
Method | _on |
Undocumented |
Method | _on |
Undocumented |
Inherited from NativeForEmulated
(via NamedType
):
Class Method | adapt |
Given an impl, adapt this type's class to the impl assuming "emulated". |
Inherited from Enum
(via NamedType
, NativeForEmulated
):
Class |
|
Undocumented |
Method | __repr__ |
Undocumented |
Method | adapt |
Produce an "adapted" form of this type, given an "impl" class to work with. |
Method | adapt |
Given an impl class, adapt this type to the impl assuming "emulated". |
Method | as |
Return an instance of the generic type corresponding to this type using heuristic rule. The method may be overridden if this heuristic rule is not sufficient. |
Method | bind |
Return a conversion function for processing bind values. |
Method | copy |
Undocumented |
Method | literal |
Return a conversion function for processing literal values that are to be rendered directly without using binds. |
Method | result |
Return a conversion function for processing result row values. |
Class Variable | __visit |
Undocumented |
Instance Variable | create |
Undocumented |
Instance Variable | enum |
Undocumented |
Instance Variable | enums |
Undocumented |
Instance Variable | validate |
Undocumented |
Instance Variable | values |
Undocumented |
Property | native |
Undocumented |
Property | python |
Return the Python type object expected to be returned by instances of this type, if known. |
Property | sort |
A sorting function that can be passed as the key to sorted. |
Method | _db |
Undocumented |
Method | _enum |
internal init for :class:`.Enum` and subclasses. |
Method | _make |
Undocumented |
Method | _object |
Undocumented |
Method | _parse |
Undocumented |
Method | _resolve |
adjust this type given a literal Python value that will be stored in a bound parameter. |
Method | _resolve |
given a Python type (e.g. ``int``, ``str``, etc. ) return an instance of this :class:`.TypeEngine` that's appropriate for this type. |
Method | _set |
Undocumented |
Method | _setup |
Undocumented |
Method | _should |
Undocumented |
Instance Variable | _default |
Undocumented |
Instance Variable | _object |
Undocumented |
Instance Variable | _omit |
Undocumented |
Instance Variable | _sort |
Undocumented |
Instance Variable | _valid |
Undocumented |
Property | _enums |
Undocumented |
Inherited from String
(via NamedType
, NativeForEmulated
, Enum
):
Instance Variable | collation |
Undocumented |
Instance Variable | length |
Undocumented |
Inherited from SchemaType
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
):
Instance Variable | dispatch |
Undocumented |
Instance Variable | inherit |
Undocumented |
Instance Variable | metadata |
Undocumented |
Instance Variable | name |
Undocumented |
Instance Variable | schema |
Undocumented |
Method | _is |
Undocumented |
Method | _set |
Associate with this SchemaEvent's parent object. |
Method | _variant |
Undocumented |
Class Variable | _use |
Undocumented |
Instance Variable | _create |
Undocumented |
Inherited from SchemaEventTarget
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
, SchemaType
):
Method | _set |
Undocumented |
Inherited from EventTarget
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
, SchemaType
, SchemaEventTarget
):
Class Variable | __slots__ |
Undocumented |
Inherited from TypeEngineMixin
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
, SchemaType
, SchemaEventTarget
, EventTarget
, Emulated
):
Method | dialect |
Undocumented |
Property | _static |
Undocumented |
Inherited from TypeEngine
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
, SchemaType
, SchemaEventTarget
, EventTarget
, Emulated
, TypeEngineMixin
):
Method | __str__ |
Undocumented |
Method | bind |
Given a bind value (i.e. a :class:`.BindParameter` instance), return a SQL expression in its place. |
Method | coerce |
Suggest a type for a 'coerced' Python value in an expression. |
Method | column |
Given a SELECT column expression, return a wrapping SQL expression. |
Method | compare |
Compare this type against the given backend type. |
Method | compare |
Compare two values for equality. |
Method | compile |
Produce a string-compiled form of this :class:`.TypeEngine`. |
Method | copy |
Undocumented |
Method | evaluates |
Return a copy of this type which has the :attr:`.should_evaluate_none` flag set to True. |
Method | with |
Produce a copy of this type object that will utilize the given type when applied to the dialect of the given name. |
Class Variable | hashable |
Flag, if False, means values from this type aren't hashable. |
Class Variable | render |
Render bind casts for :attr:`.BindTyping.RENDER_CASTS` mode. |
Class Variable | render |
render casts when rendering a value as an inline literal, e.g. with :meth:`.TypeEngine.literal_processor`. |
Class Variable | should |
If True, the Python constant ``None`` is considered to be handled explicitly by this type. |
Static Method | _to |
Undocumented |
Method | _cached |
Return a dialect-specific bind processor for this type. |
Method | _cached |
return a dialect-specific processing object for custom purposes. |
Method | _cached |
Return a dialect-specific literal processor for this type. |
Method | _cached |
Return a dialect-specific result processor for this type. |
Method | _compare |
Undocumented |
Method | _default |
Undocumented |
Method | _dialect |
Return a dialect-specific registry which caches a dialect-specific implementation, bind processing function, and one or more result processing functions. |
Method | _gen |
Undocumented |
Method | _unwrapped |
Return the 'unwrapped' dialect impl for this type. |
Class Variable | _is |
Undocumented |
Class Variable | _is |
Undocumented |
Class Variable | _is |
Undocumented |
Class Variable | _is |
Undocumented |
Class Variable | _isnull |
Undocumented |
Class Variable | _sqla |
Undocumented |
Property | _generic |
Undocumented |
Property | _has |
memoized boolean, check if bind_expression is implemented. |
Property | _has |
memoized boolean, check if column_expression is implemented. |
Property | _type |
Return a rudimental 'affinity' value expressing the general class of type. |
Inherited from Visitable
(via NamedType
, NativeForEmulated
, Enum
, String
, Concatenable
, SchemaType
, SchemaEventTarget
, EventTarget
, Emulated
, TypeEngineMixin
, TypeEngine
):
Method | __class |
Undocumented |
Method | __init |
Undocumented |
Class Method | _generate |
Undocumented |
Method | _compiler |
Undocumented |
Class Variable | _original |
Undocumented |
sqlalchemy.sql.sqltypes.Enum.__init__
Construct an :class:`_postgresql.ENUM`. Arguments are the same as that of :class:`_types.Enum`, but also including the following parameters. :param create_type: Defaults to True. Indicates that ``CREATE TYPE`` should be emitted, after optionally checking for the presence of the type, when the parent table is being created; and additionally that ``DROP TYPE`` is called when the table is dropped. When ``False``, no check will be performed and no ``CREATE TYPE`` or ``DROP TYPE`` is emitted, unless :meth:`~.postgresql.ENUM.create` or :meth:`~.postgresql.ENUM.drop` are called directly. Setting to ``False`` is helpful when invoking a creation scheme to a SQL file without access to the actual database - the :meth:`~.postgresql.ENUM.create` and :meth:`~.postgresql.ENUM.drop` methods can be used to emit SQL to a target bind.
Emit ``CREATE TYPE`` for this :class:`_postgresql.ENUM`. If the underlying dialect does not support PostgreSQL CREATE TYPE, no action is taken. :param bind: a connectable :class:`_engine.Engine`, :class:`_engine.Connection`, or similar object to emit SQL. :param checkfirst: if ``True``, a query against the PG catalog will be first performed to see if the type does not exist already before creating.
Emit ``DROP TYPE`` for this :class:`_postgresql.ENUM`. If the underlying dialect does not support PostgreSQL DROP TYPE, no action is taken. :param bind: a connectable :class:`_engine.Engine`, :class:`_engine.Connection`, or similar object to emit SQL. :param checkfirst: if ``True``, a query against the PG catalog will be first performed to see if the type actually exists before dropping.