class JSON(sqltypes.JSON):
Known subclasses: sqlalchemy.dialects.postgresql.json.JSONB
, sqlalchemy.dialects.postgresql.asyncpg.AsyncpgJSON
, sqlalchemy.dialects.postgresql.pg8000._PGJSON
, sqlalchemy.dialects.postgresql.psycopg2._PGJSON
, sqlalchemy.dialects.postgresql.pygresql._PGJSON
Represent the PostgreSQL JSON type.
_postgresql.JSON
is used automatically whenever the base
_types.JSON
datatype is used against a PostgreSQL backend,
however base _types.JSON
datatype does not provide Python
accessors for PostgreSQL-specific comparison methods such as
_postgresql.JSON.Comparator.astext
; additionally, to use
PostgreSQL JSONB, the _postgresql.JSONB
datatype should
be used explicitly.
See Also
_types.JSON
- main documentation for the generic
cross-platform JSON datatype.
The operators provided by the PostgreSQL version of _types.JSON
include:
Index operations (the -> operator):
data_table.c.data['some key'] data_table.c.data[5]
Index operations returning text (the ->> operator):
data_table.c.data['some key'].astext == 'some value'
Note that equivalent functionality is available via the
.JSON.Comparator.as_string
accessor.
Index operations with CAST (equivalent to CAST(col ->> ['some key'] AS <type>)):
data_table.c.data['some key'].astext.cast(Integer) == 5
Note that equivalent functionality is available via the
.JSON.Comparator.as_integer
and similar accessors.
Path index operations (the #> operator):
data_table.c.data[('key_1', 'key_2', 5, ..., 'key_n')]
Path index operations returning text (the #>> operator):
data_table.c.data[('key_1', 'key_2', 5, ..., 'key_n')].astext == 'some value'
_expression.ColumnElement.cast
operator on
JSON objects now requires that the .JSON.Comparator.astext
modifier be called explicitly, if the cast works only from a textual
string.Index operations return an expression object whose type defaults to
_types.JSON
by default,
so that further JSON-oriented instructions
may be called upon the result type.
Custom serializers and deserializers are specified at the dialect level,
that is using _sa.create_engine
. The reason for this is that when
using psycopg2, the DBAPI only allows serializers at the per-cursor
or per-connection level. E.g.:
engine = create_engine("postgresql://scott:tiger@localhost/test", json_serializer=my_serialize_fn, json_deserializer=my_deserialize_fn )
When using the psycopg2 dialect, the json_deserializer is registered against the database using psycopg2.extras.register_default_json.
See Also
_types.JSON
- Core level JSON type
_postgresql.JSONB
_postgresql.JSON
is now a PostgreSQL-
specific specialization of the new _types.JSON
type.Class | Comparator |
Define comparison operations for _types.JSON . |
Method | __init__ |
Construct a _types.JSON type. |
Instance Variable | astext_type |
Undocumented |
Inherited from JSON
:
Class | JSONElementType |
Common function for index / path elements in a JSON expression. |
Class | JSONIndexType |
Placeholder for the datatype of a JSON index value. |
Class | JSONIntIndexType |
Placeholder for the datatype of a JSON index value. |
Class | JSONPathType |
Placeholder type for JSON path operations. |
Class | JSONStrIndexType |
Placeholder for the datatype of a JSON index value. |
Method | bind_processor |
Return a conversion function for processing bind values. |
Method | result_processor |
Return a conversion function for processing result row values. |
Constant | NULL |
Describe the json value of NULL. |
Method | should_evaluate_none.setter |
Undocumented |
Class Variable | __visit_name__ |
Undocumented |
Class Variable | hashable |
Flag, if False, means values from this type aren't hashable. |
Instance Variable | none_as_null |
Undocumented |
Property | _str_impl |
Undocumented |
Property | python_type |
Return the Python type object expected to be returned by instances of this type, if known. |
Property | should_evaluate_none |
Alias of _types.JSON.none_as_null |
Inherited from TypeEngine
(via JSON
):
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 | 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 | 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 | with_variant |
Produce a new type object that will utilize the given type when applied to the dialect of the given name. |
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_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 JSON
, TypeEngine
):
Method | get_children |
Return immediate child .visitors.Traversible elements of this .visitors.Traversible . |
Method | __class_getitem__ |
Undocumented |
sqlalchemy.types.JSON.__init__
_types.JSON
type.Parameters | |
none_as_null | if True, persist the value None as a
SQL NULL value, not the JSON encoding of null. Note that
when this flag is False, the from sqlalchemy import null conn.execute(table.insert(), data=null())
Changed in version 0.9.8: - Added none_as_null, and
.null
is now supported in order to persist a NULL value.See Also
|
astext_type | the type to use for the
New in version 1.1.
|