Hello, I've created a TypeDecorator for use with postgresql's JSON type,
for the purpose of adapting it to sqlite and it's producing an incorrect
bind parameter when using JSON's column index operation.
I'm using sqlalchemy 0.9.4 (I haven't been able to install a more updated
version as yet, but I didn't see anything mentioning behavior like this in
the changelogs so I thought I'd ask the mailing list).
I have the following class:
class DynamicProperties(Base):
__tablename__ = 'dynamic_properties'
guid = Column(Text, primary_key=True)
dynamic_properties = Column(JSONDict)
Where JSONDict is simply this:
class JSONDict(TypeDecorator):
"""Backend-agnostic JSON type
Uses native JSON type on postgres or manually serializes/deserializes
JSON to Text on others
"""
impl = JSON
I removed the actual implementation of the TypeDecorator since this alone
seems to be enough to trigger the issue.
If I create a query like this:
>>> q = session.query(DynamicProperties.dynamic_properties['vol_state'])
>>> q.all()
It produces this:
2015-10-28 02:51:48,445 - sqlalchemy.engine.base.Engine.db - INFO - base::
_execute_context:903 - SELECT dynamic_properties.dynamic_properties -> %(
dynamic_properties_1)s AS anon_1
FROM dynamic_properties
2015-10-28 02:51:48,445 - sqlalchemy.engine.base.Engine.db - INFO - base::
_execute_context:905 - {'dynamic_properties_1': '"vol_state"'}
It looks like the "vol_state" bind parameter is actually being serialized
and this always produces a result of (None,) even though the 'vol_state'
key is in the JSON dict.
If I change the Column type in the class definition from my JSONDict to
plain old JSON:
class DynamicProperties(Base):
__tablename__ = 'dynamic_properties'
guid = Column(Text, primary_key=True)
dynamic_properties = Column(JSON)
Then the same query produces a correctly quoted bind param:
2015-10-28 02:57:05,060 - sqlalchemy.engine.base.Engine.xmsdb - INFO - base
::_execute_context:903 - SELECT dynamic_properties.dynamic_properties -> %(
dynamic_properties_1)s AS anon_1
FROM dynamic_properties
2015-10-28 02:57:05,061 - sqlalchemy.engine.base.Engine.xmsdb - INFO - base
::_execute_context:905 - {'dynamic_properties_1': 'vol_state'}
and a corresponding correct result: (u'active',).
Any clues?
TIA,
Uri
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.