class documentation

class ARRAY(SchemaEventTarget, Indexable, Concatenable, TypeEngine):

Known subclasses: sqlalchemy.dialects.postgresql.ARRAY

View In Hierarchy

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.

New in version 1.1.0.
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
def __init__(self, item_type, as_tuple=False, dimensions=None, zero_indexes=False):

Construct an _types.ARRAY.

E.g.:

Column('myarray', ARRAY(Integer))

Arguments are:

Parameters
item​_typeThe 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​_tupleUndocumented
dimensionsif 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​_indexesUndocumented
as_tuple=​FalseSpecify 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=​Falsewhen 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.
def compare_values(self, x, y):
Compare two values for equality.
zero_indexes =
If True, Python zero-based indexes should be interpreted as one-based on the SQL expression side.
def _set_parent(self, column, outer=False, **kw):
Support SchemaEventTarget
def _set_parent_with_dispatch(self, parent):
__visit_name__: str =

Undocumented

_is_array: bool =

Undocumented

as_tuple =

Undocumented

dimensions =

Undocumented

item_type =

Undocumented

@property
hashable =

Flag, if False, means values from this type aren't hashable.

Used by the ORM when uniquing result lists.

@property
python_type =

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.