summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-05-18 17:44:10 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2017-05-18 17:44:10 -0400
commit4d4ea792e7ea7945de9c9b1e005ce09b2feb45b5 (patch)
tree72ad47ac17cb231f321c79e033d86a2ad693e486
parent912fb6c2d54d7f2fcda654a8f7702d122e8b8d70 (diff)
downloadsqlalchemy-4d4ea792e7ea7945de9c9b1e005ce09b2feb45b5.tar.gz
- Document the most transparent way to set JSON.NULL for
a column default. The JSON.NULL value is special in that while it is a Python-side value, it represents "do this special behavior", and is not at all like any other Python-side value for which normally, that's exactly the type of data we want back. So in this case, encourage the user to use a SQL expression that is exact, so in the ORM context, you get back what was actually persisted in the column. There's some variants of this such as literal(JSON.NULL, JSON) but text("'null'") is simpler. Change-Id: I0339fafdc03e4b2f533d53970b2f74c774f2687b Fixes: #3923
-rw-r--r--lib/sqlalchemy/sql/sqltypes.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py
index b8c8c8116..7a3c50549 100644
--- a/lib/sqlalchemy/sql/sqltypes.py
+++ b/lib/sqlalchemy/sql/sqltypes.py
@@ -1911,6 +1911,22 @@ class JSON(Indexable, TypeEngine):
session.add_all([obj1, obj2])
session.commit()
+ In order to set JSON NULL as a default value for a column, the most
+ transparent method is to use :func:`.text`::
+
+ Table(
+ 'my_table', metadata,
+ Column('json_data', JSON, default=text("'null'"))
+ )
+
+ While it is possible to use :attr:`.JSON.NULL` in this context, the
+ :attr:`.JSON.NULL` value will be returned as the value of the column,
+ which in the context of the ORM or other repurposing of the default
+ value, may not be desirable. Using a SQL expression means the value
+ will be re-fetched from the database within the context of retrieving
+ generated defaults.
+
+
"""
def __init__(self, none_as_null=False):