On 24/02/2012 10:49, Chris Withers wrote:
(Does SA have a JSONType now? we're using a homebrew one, that may be
where the problem lies...)
For reference, I've included the code for this type at the end of this
email, it uses MutableType, so the following should work:
obj = session.query(MyModel).one()
obj.config['foo'] += 1
session.commit()
...on my dev machine, the change gets persisted.
Of course, on production machines, it does not :-(
Are there known bugs in this? I see there's now a "new way" in 0.7, but
that means you have to know the type of the object stored in the column
rather than just "any json-serializable value" being okay.
cheers,
Chris
PS:
from sqlalchemy import String
from sqlalchemy.types import MutableType, TypeDecorator
import simplejson
class JSONType(MutableType, TypeDecorator):
"""Column type which stores Python objects in JSON form.
PickleType applies simplejson's ``dumps()`` to incoming objects,
and ``loads()`` on the way out, allowing simple Python objects to
be stored as a serialized text field.
As it extends MutableType, changes in mutable objects will be
detected and handled correctly. It is safe to use this column type
to store lists, dicts and other mutable types.
"""
impl = String
def process_bind_param(self, value, _):
if value is None:
return None
return self._dumps(value)
def process_result_value(self, value, _):
if value is None:
return None
return self._loads(value)
def copy_value(self, value):
return self._loads(self._dumps(value))
def is_mutable(self):
return True
def _loads(self, strvalue):
return simplejson.loads(str(strvalue), use_decimal=True)
def _dumps(self, value):
return simplejson.dumps(value, use_decimal=True)
--
Simplistix - Content Management, Batch Processing & Python Consulting
- http://www.simplistix.co.uk
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.