diff options
author | Stephen Rauch <stephen.rauch+github@gmail.com> | 2015-12-09 14:10:15 -0800 |
---|---|---|
committer | Stephen Rauch <stephen.rauch+github@gmail.com> | 2015-12-09 14:10:15 -0800 |
commit | b42ce1487e53ede01f4d37b3c71a629b554caeb6 (patch) | |
tree | ca9c72c0748c4485fde010b82311c90262c91b20 /lib/sqlalchemy/dialects/mysql/base.py | |
parent | f4a1129e79e0cd938da3e7737b190f7f4db3ed63 (diff) | |
download | sqlalchemy-pr/221.tar.gz |
Add support for MySQL JSONpr/221
Diffstat (limited to 'lib/sqlalchemy/dialects/mysql/base.py')
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 988746403..9ed13eb91 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -534,6 +534,13 @@ output:: ``explicit_defaults_for_timestamp``. Prior to this version, it will not render "NOT NULL" for a TIMESTAMP column that is ``nullable=False``. +JSON Types +---------- + +The MySQL dialect supports the JSON datatype as of version 5.7: + +* :class:`.mysql.JSON` + """ import datetime @@ -602,6 +609,8 @@ RESERVED_WORDS = set( 'get', 'io_after_gtids', 'io_before_gtids', 'master_bind', 'one_shot', 'partition', 'sql_after_gtids', 'sql_before_gtids', # 5.6 + 'json', # 5.7 + ]) AUTOCOMMIT_RE = re.compile( @@ -2225,6 +2234,12 @@ class MySQLTypeCompiler(compiler.GenericTypeCompiler): else: return self._extend_numeric(type_, "SMALLINT") + def visit_JSON(self, type_, **kw): + if not self.dialect._supports_json: + util.warn("Current MySQL version does not support JSON.") + return "TEXT" + return "JSON" + def visit_BIT(self, type_, **kw): if type_.length is not None: return "BIT(%s)" % type_.length @@ -2433,10 +2448,13 @@ class MySQLDialect(default.DefaultDialect): }) ] - def __init__(self, isolation_level=None, **kwargs): - kwargs.pop('use_ansiquotes', None) # legacy + def __init__(self, isolation_level=None, json_serializer=None, + json_deserializer=None, **kwargs): + kwargs.pop('use_ansiquotes', None) # legacy default.DefaultDialect.__init__(self, **kwargs) self.isolation_level = isolation_level + self._json_deserializer = json_deserializer + self._json_serializer = json_serializer def on_connect(self): if self.isolation_level is not None: @@ -2607,6 +2625,11 @@ class MySQLDialect(default.DefaultDialect): return self.server_version_info is None or \ self.server_version_info >= (4, 0, 2) + @property + def _supports_json(self): + return self.server_version_info is None or \ + self.server_version_info >= (5, 7, 9) + @reflection.cache def get_schema_names(self, connection, **kw): rp = connection.execute("SHOW schemas") |