[code.view]

[top] / python / PyMOTW / sqlite3 / sqlite3_custom_type.py

     #!/usr/bin/env python
     # encoding: utf-8
     #
     # Copyright (c) 2010 Doug Hellmann.  All rights reserved.
     #
     """Defining a custom type.
     """
     #end_pymotw_header
     
     import sqlite3
     try:
         import cPickle as pickle
     except:
         import pickle
     
     db_filename = 'todo.db'
     
     def adapter_func(obj):
         """Convert from in-memory to storage representation.
         """
         print 'adapter_func(%s)\n' % obj
         return pickle.dumps(obj)
     
     def converter_func(data):
         """Convert from storage to in-memory representation.
         """
         print 'converter_func(%r)\n' % data
         return pickle.loads(data)
     
     
     class MyObj(object):
         def __init__(self, arg):
             self.arg = arg
         def __str__(self):
             return 'MyObj(%r)' % self.arg
     
     # Register the functions for manipulating the type.
     sqlite3.register_adapter(MyObj, adapter_func)
     sqlite3.register_converter("MyObj", converter_func)
     
     # Create some objects to save.  Use a list of tuples so we can pass
     # this sequence directly to executemany().
     to_save = [ (MyObj('this is a value to save'),),
                 (MyObj(42),),
                 ]
     
     with sqlite3.connect(db_filename, detect_types=sqlite3.PARSE_DECLTYPES) as conn:
         # Create a table with column of type "MyObj"
         conn.execute("""
         create table if not exists obj (
             id    integer primary key autoincrement not null,
             data  MyObj
         )
         """)
         cursor = conn.cursor()
     
         # Insert the objects into the database
         cursor.executemany("insert into obj (data) values (?)", to_save)
     
         # Query the database for the objects just saved
         cursor.execute("select id, data from obj")
         for obj_id, obj in cursor.fetchall():
             print 'Retrieved', obj_id, obj, type(obj)
             print
     

[top] / python / PyMOTW / sqlite3 / sqlite3_custom_type.py

contact | logmethods.com