class ARRAY(SchemaEventTarget, Indexable, Concatenable, TypeEngine):
Known subclasses: sqlalchemy.dialects.postgresql.ARRAY
Represent a SQL Array type.
Note
This type serves as the basis for all ARRAY operations.
However, currently only the PostgreSQL backend has support for SQL
arrays in SQLAlchemy. It is recommended to use the PostgreSQL-specific
sqlalchemy.dialects.postgresql.ARRAY
type directly when using
ARRAY types with PostgreSQL, as it provides additional operators
specific to that backend.
_types.ARRAY
is part of the Core in support of various SQL
standard functions such as _functions.array_agg
which explicitly involve
arrays; however, with the exception of the PostgreSQL backend and possibly
some third-party dialects, no other SQLAlchemy built-in dialect has support
for this type.
An _types.ARRAY
type is constructed given the "type"
of element:
mytable = Table("mytable", metadata, Column("data", ARRAY(Integer)) )
The above type represents an N-dimensional array, meaning a supporting backend such as PostgreSQL will interpret values with any number of dimensions automatically. To produce an INSERT construct that passes in a 1-dimensional array of integers:
connection.execute( mytable.insert(), data=[1,2,3] )
The _types.ARRAY
type can be constructed given a fixed number
of dimensions:
mytable = Table("mytable", metadata, Column("data", ARRAY(Integer, dimensions=2)) )
Sending a number of dimensions is optional, but recommended if the datatype is to represent arrays of more than one dimension. This number is used:
When emitting the type declaration itself to the database, e.g. INTEGER[][]
When translating Python values to database values, and vice versa, e.g.
an ARRAY of .Unicode
objects uses this number to efficiently
access the string values inside of array structures without resorting
to per-row type inspection
When used with the Python getitem accessor, the number of dimensions serves to define the kind of type that the [] operator should return, e.g. for an ARRAY of INTEGER with two dimensions:
>>> expr = table.c.column[5] # returns ARRAY(Integer, dimensions=1) >>> expr = expr[6] # returns Integer
For 1-dimensional arrays, an _types.ARRAY
instance with no
dimension parameter will generally assume single-dimensional behaviors.
SQL expressions of type _types.ARRAY
have support for "index" and
"slice" behavior. The Python [] operator works normally here, given
integer indexes or slices. Arrays default to 1-based indexing.
The operator produces binary expression
constructs which will produce the appropriate SQL, both for
SELECT statements:
select(mytable.c.data[5], mytable.c.data[2:7])
as well as UPDATE statements when the _expression.Update.values
method
is used:
mytable.update().values({ mytable.c.data[5]: 7, mytable.c.data[2:7]: [1, 2, 3] })
The _types.ARRAY
type also provides for the operators
.types.ARRAY.Comparator.any
and
.types.ARRAY.Comparator.all
. The PostgreSQL-specific version of
_types.ARRAY
also provides additional operators.
See Also
Class | Comparator |
Define comparison operations for _types.ARRAY . |
Method | __init__ |
Construct an _types.ARRAY . |
Method | compare_values |
Compare two values for equality. |
Instance Variable | zero_indexes |
If True, Python zero-based indexes should be interpreted as one-based on the SQL expression side. |
Method | _set_parent |
Support SchemaEventTarget |
Method | _set_parent_with_dispatch |
Support SchemaEventTarget |
Class Variable | __visit_name__ |
Undocumented |
Class Variable | _is_array |
Undocumented |
Instance Variable | as_tuple |
Undocumented |
Instance Variable | dimensions |
Undocumented |
Instance Variable | item_type |
Undocumented |
Property | hashable |
Flag, if False, means values from this type aren't hashable. |
Property | python_type |
Return the Python type object expected to be returned by instances of this type, if known. |
Inherited from TypeEngine
:
Method | adapt |
Produce an "adapted" form of this type, given an "impl" class to work with. |
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_expression |
Given a bind value (i.e. a .BindParameter instance), return a SQL expression in its place. |
Method | bind_processor |
Return a conversion function for processing bind values. |
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 | 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 | get_dbapi_type |
Return the corresponding type object from the underlying DB-API, if any. |
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. |
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 | should_evaluate_none |
If True, the Python constant None is considered to be handled explicitly by this type. |
Class Variable | sort_key_function |
A sorting function that can be passed as the key to sorted. |
Static Method | _to_instance |
Undocumented |
Method | __repr__ |
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 |
Undocumented |
Method | copy_value |
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 TypeEngine
):
Method | get_children |
Return immediate child .visitors.Traversible elements of this .visitors.Traversible . |
Method | __class_getitem__ |
Undocumented |
sqlalchemy.dialects.postgresql.ARRAY
Construct an _types.ARRAY
.
E.g.:
Column('myarray', ARRAY(Integer))
Arguments are:
Parameters | |
item_type | The data type of items of this array. Note that dimensionality is irrelevant here, so multi-dimensional arrays like INTEGER[][], are constructed as ARRAY(Integer), not as ARRAY(ARRAY(Integer)) or such. |
as_tuple | Undocumented |
dimensions | if non-None, the ARRAY will assume a fixed
number of dimensions. This impacts how the array is declared
on the database, how it goes about interpreting Python and
result values, as well as how expression behavior in conjunction
with the "getitem" operator works. See the description at
_types.ARRAY for additional detail. |
zero_indexes | Undocumented |
as_tuple=False | Specify whether return results should be converted to tuples from lists. This parameter is not generally needed as a Python list corresponds well to a SQL array. |
zero_indexes=False | when True, index values will be converted between Python zero-based and SQL one-based indexes, e.g. a value of one will be added to all index values before passing to the database. |
sqlalchemy.dialects.postgresql.ARRAY
sqlalchemy.dialects.postgresql.ARRAY
sqlalchemy.types.TypeEngine.hashable
sqlalchemy.dialects.postgresql.ARRAY
Flag, if False, means values from this type aren't hashable.
Used by the ORM when uniquing result lists.
sqlalchemy.types.TypeEngine.python_type
sqlalchemy.dialects.postgresql.ARRAY
Return the Python type object expected to be returned by instances of this type, if known.
Basically, for those types which enforce a return type, or are known across the board to do such for all common DBAPIs (like int for example), will return that type.
If a return type is not defined, raises NotImplementedError.
Note that any type also accommodates NULL in SQL which means you can also get back None from any type in practice.