class ENUM(sqltypes.NativeForEmulated, sqltypes.Enum):
Known subclasses: sqlalchemy.dialects.postgresql.pg8000._PGEnum
, sqlalchemy.dialects.postgresql.psycopg2._PGEnum
PostgreSQL ENUM type.
This is a subclass of _types.Enum
which includes
support for PG's CREATE TYPE and DROP TYPE.
When the builtin type _types.Enum
is used and the
:paramref:`.Enum.native_enum` flag is left at its default of
True, the PostgreSQL backend will use a _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 _types.Enum
or _postgresql.ENUM
in an "inline" fashion, the CREATE TYPE and DROP TYPE is emitted
corresponding to when the _schema.Table.create
and
_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 _types.Enum
or
_postgresql.ENUM
independently, and associate it with the
_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)
_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 | adapt_emulated_to_native |
Produce a PostgreSQL native _postgresql.ENUM from plain .Enum . |
Method | __init__ |
Construct an _postgresql.ENUM . |
Method | create |
Emit CREATE TYPE for this _postgresql.ENUM . |
Method | drop |
Emit DROP TYPE for this _postgresql.ENUM . |
Class | EnumDropper |
Undocumented |
Class | EnumGenerator |
Undocumented |
Method | _check_for_name_in_memos |
Look in the 'ddl runner' for 'memos', then note our name in that collection. |
Method | _on_metadata_create |
Undocumented |
Method | _on_metadata_drop |
Undocumented |
Method | _on_table_create |
Undocumented |
Method | _on_table_drop |
Undocumented |
Class Variable | native_enum |
Undocumented |
Instance Variable | create_type |
Undocumented |
Inherited from NativeForEmulated
:
Class Method | adapt_native_to_emulated |
Given an impl, adapt this type's class to the impl assuming "emulated". |
Inherited from Enum
:
Class | Comparator |
Undocumented |
Method | __repr__ |
Undocumented |
Method | _db_value_for_elem |
Undocumented |
Method | _enum_init |
internal init for .Enum and subclasses. |
Method | _object_value_for_elem |
Undocumented |
Method | _parse_into_values |
Undocumented |
Method | _set_table |
Undocumented |
Method | _setup_for_values |
Undocumented |
Method | _should_create_constraint |
Undocumented |
Method | adapt |
Produce an "adapted" form of this type, given an "impl" class to work with. |
Method | adapt_to_emulated |
Given an impl class, adapt this type to the impl assuming "emulated". |
Method | as_generic |
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_processor |
Return a conversion function for processing bind values. |
Method | copy |
Undocumented |
Method | literal_processor |
Return a conversion function for processing literal values that are to be rendered directly without using binds. |
Method | result_processor |
Return a conversion function for processing result row values. |
Class Variable | __visit_name__ |
Undocumented |
Instance Variable | _object_lookup |
Undocumented |
Instance Variable | _omit_aliases |
Undocumented |
Instance Variable | _sort_key_function |
Undocumented |
Instance Variable | _valid_lookup |
Undocumented |
Instance Variable | create_constraint |
Undocumented |
Instance Variable | enum_class |
Undocumented |
Instance Variable | enums |
Undocumented |
Instance Variable | validate_strings |
Undocumented |
Instance Variable | values_callable |
Undocumented |
Property | _enums_argument |
Undocumented |
Property | native |
Undocumented |
Property | python_type |
Return the Python type object expected to be returned by instances of this type, if known. |
Property | sort_key_function |
A sorting function that can be passed as the key to sorted. |
Inherited from String
(via Enum
):
Method | get_dbapi_type |
Return the corresponding type object from the underlying DB-API, if any. |
Constant | RETURNS_BYTES |
Undocumented |
Constant | RETURNS_CONDITIONAL |
Undocumented |
Constant | RETURNS_UNICODE |
Undocumented |
Constant | RETURNS_UNKNOWN |
Undocumented |
Class Method | _warn_deprecated_unicode |
Undocumented |
Instance Variable | _expect_unicode |
Undocumented |
Instance Variable | _expect_unicode_error |
Undocumented |
Instance Variable | _warn_on_bytestring |
Undocumented |
Instance Variable | collation |
Undocumented |
Instance Variable | length |
Undocumented |
Inherited from TypeEngine
(via Enum
, String
):
Method | bind_expression |
Given a bind value (i.e. a .BindParameter instance), return a SQL expression in its place. |
Method | coerce_compared_value |
Suggest a type for a 'coerced' Python value in an expression. |
Method | column_expression |
Given a SELECT column expression, return a wrapping SQL expression. |
Method | compare_against_backend |
Compare this type against the given backend type. |
Method | compare_values |
Compare two values for equality. |
Method | compile |
Produce a string-compiled form of this .TypeEngine . |
Method | dialect_impl |
Return a dialect-specific implementation for this .TypeEngine . |
Method | evaluates_none |
Return a copy of this type which has the .should_evaluate_none flag set to True. |
Method | with_variant |
Produce a new 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 | should_evaluate_none |
If True, the Python constant None is considered to be handled explicitly by this type. |
Static Method | _to_instance |
Undocumented |
Method | __str__ |
Undocumented |
Method | _cached_bind_processor |
Return a dialect-specific bind processor for this type. |
Method | _cached_custom_processor |
Undocumented |
Method | _cached_literal_processor |
Return a dialect-specific literal processor for this type. |
Method | _cached_result_processor |
Return a dialect-specific result processor for this type. |
Method | _compare_type_affinity |
Undocumented |
Method | _default_dialect |
Undocumented |
Method | _dialect_info |
Return a dialect-specific registry which caches a dialect-specific implementation, bind processing function, and one or more result processing functions. |
Method | _gen_dialect_impl |
Undocumented |
Method | _resolve_for_literal |
adjust this type given a literal Python value that will be stored in a bound parameter. |
Method | _unwrapped_dialect_impl |
Return the 'unwrapped' dialect impl for this type. |
Method | copy_value |
Undocumented |
Class Variable | _is_array |
Undocumented |
Class Variable | _is_table_value |
Undocumented |
Class Variable | _is_tuple_type |
Undocumented |
Class Variable | _is_type_decorator |
Undocumented |
Class Variable | _isnull |
Undocumented |
Class Variable | _sqla_type |
Undocumented |
Property | _generic_type_affinity |
Undocumented |
Property | _has_bind_expression |
memoized boolean, check if bind_expression is implemented. |
Property | _has_column_expression |
memoized boolean, check if column_expression is implemented. |
Property | _static_cache_key |
Undocumented |
Property | _type_affinity |
Return a rudimental 'affinity' value expressing the general class of type. |
Inherited from Traversible
(via Enum
, String
, TypeEngine
):
Method | get_children |
Return immediate child .visitors.Traversible elements of this .visitors.Traversible . |
Method | __class_getitem__ |
Undocumented |
Inherited from SchemaType
(via Enum
):
Method | _is_impl_for_variant |
Undocumented |
Method | _set_parent |
Associate with this SchemaEvent's parent object. |
Method | _variant_mapping_for_set_table |
Undocumented |
Class Variable | _use_schema_map |
Undocumented |
Instance Variable | _create_events |
Undocumented |
Instance Variable | inherit_schema |
Undocumented |
Instance Variable | metadata |
Undocumented |
Instance Variable | name |
Undocumented |
Instance Variable | schema |
Undocumented |
Property | bind |
Undocumented |
Inherited from SchemaEventTarget
(via Enum
, SchemaType
):
Method | _set_parent_with_dispatch |
Undocumented |
_postgresql.ENUM
from plain
.Enum
.sqlalchemy.types.Enum.__init__
Construct an _postgresql.ENUM
.
Arguments are the same as that of
_types.Enum
, but also including
the following parameters.
Parameters | |
*enums | Undocumented |
**kw | Undocumented |
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
~.postgresql.ENUM.create
or ~.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 ~.postgresql.ENUM.create and
~.postgresql.ENUM.drop methods can
be used to emit SQL to a target bind. |
Emit CREATE TYPE for this
_postgresql.ENUM
.
If the underlying dialect does not support PostgreSQL CREATE TYPE, no action is taken.
Parameters | |
bind | a connectable _engine.Engine ,
_engine.Connection , or similar object to emit
SQL. |
checkfirst | if True, a query against the PG catalog will be first performed to see if the type does not exist already before creating. |
sqlalchemy.sql.sqltypes.SchemaType.drop
Emit DROP TYPE for this
_postgresql.ENUM
.
If the underlying dialect does not support PostgreSQL DROP TYPE, no action is taken.
Parameters | |
bind | a connectable _engine.Engine ,
_engine.Connection , or similar object to emit
SQL. |
checkfirst | if True, a query against the PG catalog will be first performed to see if the type actually exists before dropping. |
Look in the 'ddl runner' for 'memos', then note our name in that collection.
This to ensure a particular named enum is operated upon only once within any kind of create/drop sequence without relying upon "checkfirst".