Repair json example in tutorial to suit non-present sqlite support

SQLite on CI doesn't have json functions (centos) so even
though SQLAlchemy supports it in this version, use the MySQL
compiler for the example.

Change-Id: If896273adbab2e3fdb995272f6e55de420aee220
This commit is contained in:
Mike Bayer
2019-07-05 18:11:31 -04:00
parent 1abbdf0d52
commit 1ce98ca83a
+8 -8
View File
@@ -1523,29 +1523,29 @@ database side. :func:`.type_coerce` is particularly important when dealing
with the :class:`.types.JSON` datatype, which typicaly has an intricate
relationship with string-oriented datatypes on different platforms and
may not even be an explicit datatype, such as on SQLite and MariaDB.
Below, we use :func:`.type_coerce` to deliver a Python
structure as a JSON string into one of SQLite's JSON functions:
Below, we use :func:`.type_coerce` to deliver a Python structure as a JSON
string into one of MySQL's JSON functions:
.. sourcecode:: pycon+sql
>>> import json
>>> from sqlalchemy import JSON
>>> from sqlalchemy import type_coerce
>>> from sqlalchemy.dialects import mysql
>>> s = select([
... type_coerce(
... {'some_key': {'foo': 'bar'}}, JSON
... )['some_key']
... ])
>>> conn.execute(s).fetchall()
{opensql}SELECT JSON_QUOTE(JSON_EXTRACT(?, ?)) AS anon_1
('{"some_key": {"foo": "bar"}}', '$."some_key"')
{stop}[({'foo': 'bar'},)]
>>> print(s.compile(dialect=mysql.dialect()))
SELECT JSON_EXTRACT(%s, %s) AS anon_1
Above, SQLite's ``JSON_QUOTE`` and ``JSON_EXTRACT`` SQL functions were invoked
Above, MySQL's ``JSON_EXTRACT`` SQL function was invoked
because we used :func:`.type_coerce` to indicate that our Python dictionary
should be treated as :class:`.types.JSON`. The Python ``__getitem__``
operator, ``['some_key']`` in this case, became available as a result and
allowed a ``JSON_EXTRACT`` path expression to be rendered.
allowed a ``JSON_EXTRACT`` path expression (not shown, however in this
case it would ultimately be ``'$."some_key"'``) to be rendered.
Unions and Other Set Operations
-------------------------------