Viewing file: json.py (2 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# mysql/json.py # Copyright (C) 2005-2019 the SQLAlchemy authors and contributors # <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php
from __future__ import absolute_import
from ... import types as sqltypes
class JSON(sqltypes.JSON): """MySQL JSON type.
MySQL supports JSON as of version 5.7. Note that MariaDB does **not** support JSON at the time of this writing.
The :class:`.mysql.JSON` type supports persistence of JSON values as well as the core index operations provided by :class:`.types.JSON` datatype, by adapting the operations to render the ``JSON_EXTRACT`` function at the database level.
.. versionadded:: 1.1
"""
pass
class _FormatTypeMixin(object): def _format_value(self, value): raise NotImplementedError()
def bind_processor(self, dialect): super_proc = self.string_bind_processor(dialect)
def process(value): value = self._format_value(value) if super_proc: value = super_proc(value) return value
return process
def literal_processor(self, dialect): super_proc = self.string_literal_processor(dialect)
def process(value): value = self._format_value(value) if super_proc: value = super_proc(value) return value
return process
class JSONIndexType(_FormatTypeMixin, sqltypes.JSON.JSONIndexType): def _format_value(self, value): if isinstance(value, int): value = "$[%s]" % value else: value = '$."%s"' % value return value
class JSONPathType(_FormatTypeMixin, sqltypes.JSON.JSONPathType): def _format_value(self, value): return "$%s" % ( "".join( [ "[%s]" % elem if isinstance(elem, int) else '."%s"' % elem for elem in value ] ) )
|