[Sqlalchemy-tickets] Issue #3425: PGValues recipe and PostgreSQL JSONB data column (zzzeek/sqlalche
Brought to you by:
zzzeek
|
From: Priit L. <iss...@bi...> - 2015-05-18 15:14:12
|
New issue 3425: PGValues recipe and PostgreSQL JSONB data column https://bitbucket.org/zzzeek/sqlalchemy/issue/3425/pgvalues-recipe-and-postgresql-jsonb-data Priit Laes: I'm running into troubles with JSONB field that's updated via `UPDATE ... FROM VALUES (...)` clause. I have taken the PGValues example from wiki and added JSONB column called 'myjson' and I'm trying to update but it causes crash on both 1.0.4 and 0.9.8 ``` #!python Traceback (most recent call last): File "pgvalues.py", line 63, in <module> update(dict(mytext=t2.c.mytext, myint=t2.c.myint, myjson={'int': t2.c.myint})) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2949, in update update_op.exec_() File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 1074, in exec_ self._do_exec() File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 1223, in _do_exec mapper=self.mapper) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1023, in execute bind, close_with_result=True).execute(clause, params or {}) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute return meth(self, multiparams, params) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement compiled_sql, distilled_params File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1078, in _execute_context None, None) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1339, in _handle_dbapi_exception exc_info File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1073, in _execute_context context = constructor(dialect, self, conn, *args) File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 590, in _init_compiled for key in compiled_params File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 590, in <genexpr> for key in compiled_params File "/home/plaes/.virtualenvs/kabushiki/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/json.py", line 211, in process return json_serializer(value).encode(encoding) File "/usr/lib64/python2.7/json/__init__.py", line 243, in dumps return _default_encoder.encode(obj) File "/usr/lib64/python2.7/json/encoder.py", line 207, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/lib64/python2.7/json/encoder.py", line 270, in iterencode return _iterencode(o, 0) File "/usr/lib64/python2.7/json/encoder.py", line 184, in default raise TypeError(repr(o) + " is not JSON serializable") sqlalchemy.exc.StatementError: (exceptions.TypeError) <sqlalchemy.sql.elements.ColumnClause at 0x7fb44a267e90; myint> is not JSON serializable [SQL: u"UPDATE mytable SET myjson=%(myjson)s, mytext=myvalues.mytext, myint=myvalues.myint FROM (VALUES (1, 'textA', 99), (2, 'textB', 88)) AS myvalues (mykey, mytext, myint) WHERE mytable.mykey = myvalues.mykey"] [parameters: [{}]] ``` |