From: Mike Bayer Date: Fri, 5 Jul 2019 22:11:31 +0000 (-0400) Subject: Repair json example in tutorial to suit non-present sqlite support X-Git-Tag: rel_1_3_6~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=332eff7ddf1bf4d0daaffeb09305e27b7f1f93cb;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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 (cherry picked from commit 1ce98ca83a4b2da12e52aa0f4ab181c83063abc2) --- diff --git a/doc/build/core/tutorial.rst b/doc/build/core/tutorial.rst index da359a06f4..cc7ce5463a 100644 --- a/doc/build/core/tutorial.rst +++ b/doc/build/core/tutorial.rst @@ -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 -------------------------------