> On Oct 23, 2014, at 7:42 AM, Peter Waller <pe...@scraperwiki.com> wrote:
> 
> We would like to freeze the results of a query to my database in a yaml file, 
> so that we can use the results in an app which isn't connected to the 
> database.
> 
> It makes sense here to reuse the model classes. Here's an example:
> 
> class Foo(declarative_base()):
>     __tablename__ = "foo"
>     id = S.Column(S.Integer, primary_key=True)
> 
> Unfortunately, `yaml.dump(Foo())` gives a surprising result:
> 
> /usr/lib/python3/dist-packages/yaml/representer.py in represent_object(self, 
> data)
>     311             reduce = copyreg.dispatch_table[cls](data)
>     312         elif hasattr(data, '__reduce_ex__'):
> --> 313             reduce = data.__reduce_ex__(2)
>     314         elif hasattr(data, '__reduce__'):
>     315             reduce = data.__reduce__()
> 
> /usr/lib/python3.4/copyreg.py in _reduce_ex(self, proto)
>      63     else:
>      64         if base is self.__class__:
> ---> 65             raise TypeError("can't pickle %s objects" % base.__name__)
>      66         state = base(self)
>      67     args = (self.__class__, base, state)
> 
> TypeError: can't pickle int objects
> 
> It seems that what is happening is that `data` is equal to `Foo`, and 
> `Foo.__reduce_ex__(2)` gives `TypeError: can't pickle int objects`. As does 
> `declarative_base().__reduce_ex__(2)`.
> 
> I note that `pickle.dumps` works. But we'd rather use YAML.
> 
> Where is the bug? Is it in sqlalchemy, yaml, or python?

no clue.  ints shouldn’t have an issue with pickle, obviously!    for Yaml it 
would be much more appropriate to build custom per-class serialization in any 
case since you don’t want all the persistence junk like _sa_instance_state() 
carried along.


-- 
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.

Reply via email to