Sorry, not quite there.

I can't see why for myself but when I pass a python list into this
SQLCustom definition in db.py data is stored (and pickled) without
complaint but when I unpickle the data, the data is returned as a
python string (perhaps because the field it of native 'text')

If I use a field of type 'text' and perform the pickling in my module
code then I can put lists in and get lists out.

Any idea why? it'd be real nice to define the pickling once in db.py


On Feb 23, 10:30 am, Carl <carl.ro...@gmail.com> wrote:
> thanks for the turn of speed!
>
> I now have this in db.py and it works a treat...
> import pickle
> from gluon.sql import SQLCustomType
> serialize = SQLCustomType(type='text',
>                           native='text',
>                           encoder=(lambda x: '"%s"' %
> pickle.dumps(x).replace('""', '""')),
>                           decoder=(lambda x: pickle.loads(x)))
> ...
> Field('answer', serialize)
>
> On Feb 23, 10:22 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
>
>
> > My bad. The encoder should be not
>
> > encoder = (lambda x:cPickle.dumps(s)
>
> > but
>
> > encoder = (lambda x: "'%s'" % cPickle.dumps(s).replace("'", "''"))
>
> > This is why the SQLCustomType API needs to be rewritten.
>
> > On Feb 23, 4:06 am, Carl <carl.ro...@gmail.com> wrote:
>
> > > print _insert() gets this...
>
> > > INSERT INTO puzzle(assessment_ref, pia, pio, rung, score, answer,
> > > version, cDate, mDate) VALUES ('AP5P', 'Which of these lines is a
> > > *comment* in Python code?
>
> > >         .= # a comment
> > >         .- // a comment
> > >         .- * a comment', 'Which of these lines is a *comment* in
> > > Python code?
>
> > >         .- # a comment
> > >         .- // a comment
> > >         .- * a comment', 1, 1, (lp0
> > > S'0'
> > > p1
> > > a., 1, 1266919327.86, 1266919327.86);
>
> > > the S'0'
> > > p1
> > > a.
> > > is the parameter causing the hiccup. It might be the single-quotes? or
> > > the carriage-returns?
>
> > > Perhaps I need to escape my parameter in encoder/decoder in db.py?
>
> > > On Feb 23, 9:50 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > before the
>
> > > > ... insert(....)
>
> > > > can you
>
> > > > print ..._insert(...)
>
> > > > this will tell us what is being sent to the db.
>
> > > > On Feb 23, 3:29 am, Carl <carl.ro...@gmail.com> wrote:
>
> > > > > I decided to go ahead and move my pickling to db.py with the following
> > > > > additions:
>
> > > > > import pickle
> > > > > from gluon.sql import SQLCustomType
> > > > > serialise = SQLCustomType(type='text',
> > > > >                           native='text',
> > > > >                           encoder=(lambda x: pickle.dumps(x)),
> > > > >                           decoder=(lambda x: pickle.loads(x)))
> > > > > ...
> > > > > Field ('answer', serialise)
>
> > > > > When I try and insert a row I get the following error:
> > > > >   File "E:\projects\workspace\TestEnvoy\web2py\gluon\sql.py", line
> > > > > 1850, in insert
> > > > >     self._db._execute(query)
> > > > >   File "E:\projects\workspace\TestEnvoy\web2py\gluon\sql.py", line
> > > > > 890, in <lambda>
> > > > >     self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
> > > > > OperationalError: near "S": syntax error
>
> > > > > When I had the pickle.dumps/loads calls within a module all worked
> > > > > fine.
> > > > > Where I have gone wrong?
>
> > > > > On Feb 18, 4:42 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > You should do:
>
> > > > > > from gluon.sql import SQLCustomType
>
> > > > > > pickle =
> > > > > > SQLCustomType(
> > > > > >             type
> > > > > > ='text',
> > > > > >             native
> > > > > > ='text',
> > > > > >             encoder = (lambda x:cPickle.dumps(s)),
> > > > > >             decoder = (lambda x: cPikcle.loads(s))
> > > > > >             )
>
> > > > > > Field('mypickle',pickle)
>
> > > > > > **** SQLCustomField may disappear in the new DAL in faviour of a 
> > > > > > more
> > > > > > customizable mechanism ****
>
> > > > > > On Feb 17, 9:20 pm, spiffytech <spiffyt...@gmail.com> wrote:
>
> > > > > > > That would work, calling MY_PICKLE functions everywhere seems 
> > > > > > > like as
> > > > > > > much work as calling pickle functions. It would be nice if the
> > > > > > > pickling could be done transparently behind the scenes, so my
> > > > > > > controller code could be cleaner and less error-prone.
>
> > > > > > > -Brian
>
> > > > > > > On Feb 17, 2:34 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
>
> > > > > > > > Could you write a function that handles the inserts/selects 
> > > > > > > > instead?
>
> > > > > > > > class MY_PICKLE():
> > > > > > > >     @classmethod
> > > > > > > >     def get(keyname):
> > > > > > > >          pkldump = db(db.pickle_table.keyname == 
> > > > > > > > keyname).select().first()
> > > > > > > >          return pickle.loads(pkldump.value)
> > > > > > > >     @classmethod
> > > > > > > >     def save(keyname, value):
> > > > > > > >         pkldump = db(db.pickle_table.keyname == 
> > > > > > > > keyname).select().first()
> > > > > > > >         if pkldump:
> > > > > > > >             pkldump.update_record(value=pickle.dumps(value))
> > > > > > > >         else:
> > > > > > > >             
> > > > > > > > db.picke_table.insert(keyname=keyname,value=pickle.dumps(value))
>
> > > > > > > > a_list = MY_PICKLE.get("listkey")
>
> > > > > > > > # do some stuff to list
>
> > > > > > > > MY_PICKLE.save("listkey", a_list)
>
> > > > > > > > -Thadeus
>
> > > > > > > > On Wed, Feb 17, 2010 at 1:20 PM, spiffytech 
> > > > > > > > <spiffyt...@gmail.com> wrote:
> > > > > > > > > I'm serializing with Pickle in my app, but it's a hassle to 
> > > > > > > > > dump/load
> > > > > > > > > the data every time I mess with it. Is there a way to make the
> > > > > > > > > serializing happen automatically with DB access?
>
> > > > > > > > > -Brian
>
> > > > > > > > > On Feb 17, 1:46 pm, Carl <carl.ro...@gmail.com> wrote:
> > > > > > > > >> thanks Jorge; most helpful in pointing me in the right 
> > > > > > > > >> direction.
>
> > > > > > > > >> The python to pickle is simply; for example:
> > > > > > > > >>     import pickle
> > > > > > > > >>     flat_retort = pickle.dumps(retort)
>
> > > > > > > > >> and to unpickle; for example:
> > > > > > > > >>     import pickle
> > > > > > > > >>     options = pickle.loads(rows[0].retort)
>
> > > > > > > > >> On Feb 17, 3:57 pm, JorgeRpo <jorgeh...@gmail.com> wrote:
>
> > > > > > > > >> > On Feb 17, 10:47 am, Carl <carl.ro...@gmail.com> wrote:
>
> > > > > > > > >> > > I have a Python list that I want to store and retrieve 
> > > > > > > > >> > > from the data
> > > > > > > > >> > > store.
>
> > > > > > > > >> > > The individual items of the list are of no use unless 
> > > > > > > > >> > > used with the
> > > > > > > > >> > > items of the complete list and there are no use-cases 
> > > > > > > > >> > > requiring
> > > > > > > > >> > > searching for a specified list item. The number of items 
> > > > > > > > >> > > in the list
> > > > > > > > >> > > is between one and fifteen (any more is beyond end users 
> > > > > > > > >> > > to manage).
>
> > > > > > > > >> > > I'd like to store and retrieve the list in a single 
> > > > > > > > >> > > field. On
> > > > > > > > >> > > retrieval the data would be in a Python list object.
>
> > > > > > > > >> > > What's an approach I can use?
>
> > > > > > > > >> > serialize
> > > > > > > > >> > --
> > > > > > > > >> > sig text
>
> > > > > > > > > --
> > > > > > > > > You received this message because you are subscribed to the 
> > > > > > > > > Google Groups "web2py-users" group.
> > > > > > > > > To post to this group, send email to web...@googlegroups.com.
> > > > > > > > > To unsubscribe from this group, send email to 
> > > > > > > > > web2py+unsubscr...@googlegroups.com.
> > > > > > > > > For more options, visit this group 
> > > > > > > > > athttp://groups.google.com/group/web2py?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.

Reply via email to