diff options
author | Mateusz Susik <mateusz.susik@cern.ch> | 2014-10-24 13:27:29 +0200 |
---|---|---|
committer | Mateusz Susik <mateusz.susik@cern.ch> | 2014-10-24 13:27:29 +0200 |
commit | e7d61d594b8a89535696436a667a526bd2999fb2 (patch) | |
tree | 371697a770c02aaf051dfa0052318b0395e36792 | |
parent | 393470c7abf1b1e0c32f037e0ed1eb8e8ce82543 (diff) | |
download | sqlalchemy-pr/145.tar.gz |
Psycopg2 JSONB support.pr/145
-rw-r--r-- | lib/sqlalchemy/dialects/postgresql/psycopg2.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py index 1a2a1ffe4..f90d3054a 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py @@ -261,7 +261,7 @@ from .base import PGDialect, PGCompiler, \ ENUM, ARRAY, _DECIMAL_TYPES, _FLOAT_TYPES,\ _INT_TYPES from .hstore import HSTORE -from .json import JSON +from .json import JSON, JSONB logger = logging.getLogger('sqlalchemy.dialects.postgresql') @@ -326,6 +326,15 @@ class _PGJSON(JSON): else: return super(_PGJSON, self).result_processor(dialect, coltype) + +class _PGJSONB(JSONB): + + def result_processor(self, dialect, coltype): + if dialect._has_native_jsonb: + return None + else: + return super(_PGJSONB, self).result_processor(dialect, coltype) + # When we're handed literal SQL, ensure it's a SELECT query. Since # 8.3, combining cursors and "FOR UPDATE" has been fine. SERVER_SIDE_CURSOR_RE = re.compile( @@ -416,6 +425,7 @@ class PGDialect_psycopg2(PGDialect): _has_native_hstore = False _has_native_json = False + _has_native_jsonb = False colspecs = util.update_copy( PGDialect.colspecs, @@ -424,7 +434,8 @@ class PGDialect_psycopg2(PGDialect): ENUM: _PGEnum, # needs force_unicode sqltypes.Enum: _PGEnum, # needs force_unicode HSTORE: _PGHStore, - JSON: _PGJSON + JSON: _PGJSON, + JSONB: _PGJSONB } ) @@ -453,6 +464,7 @@ class PGDialect_psycopg2(PGDialect): self._hstore_oids(connection.connection) \ is not None self._has_native_json = self.psycopg2_version >= (2, 5) + self._has_native_jsonb = self.psycopg2_version >= (2, 5, 4) # http://initd.org/psycopg/docs/news.html#what-s-new-in-psycopg-2-0-9 self.supports_sane_multi_rowcount = self.psycopg2_version >= (2, 0, 9) |