Re: python an sqlite objects
- From: Gerhard Häring <gh@xxxxxxxxxxx>
- Date: Wed, 03 Dec 2008 22:21:54 +0100
azrael wrote:
It logical that it would be more efficient and logical to use a object
oriented database, but in this case I ask because of the portable
nature of sqlite.
so, if I get it right, this should be possible [...]
Did you try it? Did it work? If so,it was pure luck. Attached is a script that shows how to do it right.
-- Gerhard # This is an example for storing pickleable Python objects in a SQLite
# database
import cPickle as pickle
try:
from pysqlite2 import dbapi2 as sqlite3
except ImportError:
import sqlite3
class Point(object):
def __init__(self, x, y):
self.x, self.y = x, y
def __repr__(self):
return "<Point(%s, %s)>" % (self.x, self.y)
def test():
con = sqlite3.connect(":memory:")
cur = con.cursor()
# Make sure you store your pickled
# cur.execute("create table pickled(id integer primary key, data blob)")
cur.execute("create table pickled(id integer primary key, data blob)")
# Here we force pickle to use the efficient binary protocol
# (protocol=2). This means you absolutely must use an SQLite BLOB field
# and make sure you use sqlite3.Binary() to bind a BLOB parameter.
p1 = Point(3, 4)
cur.execute("insert into pickled(data) values (?)", (sqlite3.Binary(pickle.dumps(p1, protocol=2)),))
# If we use old pickle protocol (protocol=0, which is also the default),
# we get away with sending ASCII bytestrings to SQLite.
p2 = Point(-5, 3.12)
cur.execute("insert into pickled(data) values (?)", (pickle.dumps(p2, protocol=0),))
# Fetch the BLOBs back from SQLite
cur.execute("select data from pickled")
for row in cur:
serialized_point = row[0]
# Deserialize the BLOB to a Python object - # pickle.loads() needs a
# bytestring.
point = pickle.loads(str(serialized_point))
print "got point back from database", point
if __name__ == "__main__":
test()
- Follow-Ups:
- Re: python an sqlite objects
- From: eric
- Re: python an sqlite objects
- References:
- python an sqlite objects
- From: azrael
- Re: python an sqlite objects
- From: Gerhard Häring
- Re: python an sqlite objects
- From: azrael
- python an sqlite objects
- Prev by Date: building an extension module with autotools?
- Next by Date: Re: Numpy record array - field names for all dimensions
- Previous by thread: Re: python an sqlite objects
- Next by thread: Re: python an sqlite objects
- Index(es):
Relevant Pages
|