On Thu, Nov 29, 2007 at 06:11:11PM +0100, Bart wrote:
> I meant that I have no idea how to format the data I should be setting.

   PickleCol stores pickle strings, and expects a pickle string back from
the DB. But PickleCol inherits BLOBCol, and hence with SQLite uses base64
to encode/decode pickles.

> Given that, it's trivial to give you code that doesn't work :), say...
> 
> def set_data(id,data):

   I rewrote your code this way:

#! /usr/bin/env python

import base64, pickle
from pysqlite2 import dbapi2 as sqlite

data = {"test1": 1, "test2": "2"}

con = sqlite.connect("test.sqdb") #my own variable. It needed a place.
cur = con.cursor()
cur.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, test BLOB)")

pickledata = pickle.dumps(data,2)
cur.execute("INSERT INTO test (test) VALUES 
(?)",(base64.encodestring(pickledata),))

con.commit()
cur.close()
con.close()

   And get the data back in SQLObject:

from sqlobject import *
from sqlobject.sqlbuilder import *

__connection__ = 
"sqlite:///home/phd/work/SQLObject/test-SQLObject/test.sqdb?debug=1"

class Test(SQLObject):
   test = PickleCol()

for row in Test.select():
   print row.test

   It prints:
 1/Select  :  SELECT test.id, test.test FROM test WHERE 1 = 1
 1/QueryR  :  SELECT test.id, test.test FROM test WHERE 1 = 1
 1/COMMIT  :  auto
{'test1': 1, 'test2': '2'}

   I.e., the data is unpickled successfully.

> Well, you didn't import sqlobject, or connect to any backing database
> so I it's not exactly runnable code either, nor does it seem to apply to 
> sqlite.
> 
> ('course, SQLObject is slightly Weird when it comes to state and connections,
>  so maybe you're doing something interesting)

   Nothing interesting. The code that I've skipped is:

from sqlobject import *
from sqlobject.sqlbuilder import *

__connection__ = 
"sqlite:///home/phd/work/SQLObject/test-SQLObject/test.sqdb?debug=1"

> > > You're saying 70MB
> > > non-parametric data work in sqlite right now without BLOBs?
> >
> >    Works for me with BLOBCol and PickleCol, no problem.

> But sqlite has a 1MB (default) query size limit

   This is the default. It seems Debian changed the default.

> Actually, I suppose the quickest short-term (but not so portable)
> fix for me is to recompile sqlite.

   Certainly. In any case SQLObject cannot work around builtin SQLite
limits.

Oleg.
-- 
     Oleg Broytmann            http://phd.pp.ru/            [EMAIL PROTECTED]
           Programmers don't die, they just GOSUB without RETURN.

-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to