From: Mike Bayer Date: Thu, 5 Jan 2017 15:02:58 +0000 (-0500) Subject: - add a section for ARRAY of JSON to complement ARRAY of ENUM. references #3467 X-Git-Tag: rel_1_1_5~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b4d028a69270c1c7918281a60280dd0b65963a2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add a section for ARRAY of JSON to complement ARRAY of ENUM. references #3467 Change-Id: I9836b842be01ef24138071fa022d80f5f77be14f --- diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index c5021249e7..339536dd4a 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -814,6 +814,29 @@ This type is not included as a built-in type as it would be incompatible with a DBAPI that suddenly decides to support ARRAY of ENUM directly in a new version. +.. _postgresql_array_of_json: + +Using JSON/JSONB with ARRAY +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Similar to using ENUM, for an ARRAY of JSON/JSONB we need to render the +appropriate CAST, however current psycopg2 drivers seem to handle the result +for ARRAY of JSON automatically, so the type is simpler:: + + + class CastingArray(ARRAY): + def bind_expression(self, bindvalue): + return sa.cast(bindvalue, self) + +E.g.:: + + Table( + 'mydata', metadata, + Column('id', Integer, primary_key=True), + Column('data', CastingArray(JSONB)) + ) + + """ from collections import defaultdict import re