def register_uuid(oid=None): """Create the UUID type and an uuid.UUID adapter.""" if not oid: oid = 2950 _ext.UUID = _ext.new_type((oid, ), "UUID", lambda data, cursor: data and uuid.UUID(data) or None) _ext.register_type(_ext.UUID) _ext.register_adapter(uuid.UUID, UUID_adapter) return _ext.UUID
id = 0 def __init__(self): self.creation_time = datetime.now() self.album_id = self.id Album.id = Album.id + 1 self.binary_data = buffer('12312312312121') class Order(object): id = 0 def __init__(self): self.items = ['rice','chocolate'] self.price = 34 self.order_id = self.id Order.id = Order.id + 1 register_adapter(Album, ObjectMapper) register_adapter(Order, ObjectMapper) # Describe what is needed to save on each object # This is actually just configuration, you can use xml with a parser if you # like to have plenty of wasted CPU cycles ;P. persistent_fields = {'Album': ['album_id', 'creation_time', 'binary_data'], 'Order': ['order_id', 'items', 'price'] } print adapt(Album()).generateInsert() print adapt(Album()).generateInsert() print adapt(Album()).generateInsert() print adapt(Order()).generateInsert() print adapt(Order()).generateInsert()
def prepare(self, conn): pass def getquoted(self): # this is the important line: note how every object in the # list is adapted and then how getquoted() is called on it qobjs = [str(psycoadapt(o).getquoted()) for o in self._seq] return '(' + ', '.join(qobjs) + ')' __str__ = getquoted # add our new adapter class to psycopg list of adapters register_adapter(tuple, SQL_IN) register_adapter(float, AsIs) register_adapter(int, AsIs) # usually we would call: # # conn = psycopg.connect("...") # curs = conn.cursor() # curs.execute("SELECT ...", (("this", "is", "the", "tuple"),)) # # but we have no connection to a database right now, so we just check # the SQL_IN class by calling psycopg's adapt() directly: if __name__ == '__main__': print "Note how the string will be SQL-quoted, but the number will not:" print psycoadapt(("this is an 'sql quoted' str\\ing", 1, 2.0))