Damjan wrote:
>>That was the problem I had. I'm using MySQL 4.0, and with a BLOB type
>>it returns unicode,
>>
>>
>
>Thats strange, it shouldn't return a unicode object??! It returns an
>array.array object for me.
>
>
You're right, it was a char array. I did the test early last week at work.
I tried your strategy and it worked. You can download version 0.4
http://quixote.idyll.org/session2/session2-0.4.tar.gz
or use the attached patch.
-- Mike Orr
Index: MySQLSessionStore.py
===================================================================
--- MySQLSessionStore.py (revision 92)
+++ MySQLSessionStore.py (working copy)
@@ -21,6 +21,7 @@
class MySQLSessionStore(SessionStore):
is_multiprocess_safe = True
is_thread_safe = False # Can't share db connection between threads.
+ pickle_protocol = 2
def __init__(self, conn, table=None):
if table is None:
@@ -43,11 +44,12 @@
return default
assert c.rowcount == 1, "more than one session with id %s" % (id,)
pck = c.fetchone()[0]
+ pck = pck.tostring() # Convert from array.array('c') type.
obj = pickle.loads(pck)
return obj
def save_session(self, session):
- pck = pickle.dumps(session)
+ pck = pickle.dumps(session, protocol=self.pickle_protocol)
c = self.conn.cursor()
# decide whether to INSERT or UPDATE:
sql = "REPLACE INTO %s (id, pickle) VALUES (%%(id)s, %%(p)s)"
@@ -74,7 +76,7 @@
c.execute("""\
CREATE TABLE %s (
id VARCHAR(255) NOT NULL PRIMARY KEY,
-pickle TEXT NOT NULL,
+pickle BLOB NOT NULL,
modify_time TIMESTAMP)""" % self.table)
def delete_old_sessions(self, minutes):