The following example code demonstrates the basic principles of using D-ISAM in Python, by means of the standard ctypes library.
The required disam72 class module is here
An overview is available here
Download the example here
#!/usr/bin/python
from ctypes import *
from disam72 import d7, d7key, d7error
name = "example_isam_file"
class RECORD(Structure):
_fields_ = [ ( "code", c_int ),
( "name", c_char * 31 ) ]
key1 = d7key( d7.ISNODUPS, 1, ( ( 0, 4, d7.LONGTYPE ), ) )
key2 = d7key( d7.COMPRESS + d7.TNULL, 1, ( ( 4, 31, d7.STRINGTYPE ), ) )
d7.iserase( name )
isam = d7.isBuild( name, 35, 0, byref(key1), d7.ISINOUT + d7.ISMANULOCK )
if isam is None:
raise d7error( None, "build %s failed" % name )
if d7.isAddIndex( isam, byref(key2) ) == 0:
raise d7error( isam, "add second index failed" );
pad = RECORD( 0, "" )
pad.code = 1
pad.name = "banana, junior"
if d7.isWrite( isam, byref(pad) ) == 0:
raise d7error( isam, "add %d %s failed" % ( pad.code, pad.name ) )
pad.code = 2
pad.name = "apple, macintosh"
if d7.isWrite( isam, byref(pad) ) == 0:
raise d7error( isam, "add %d %s failed" % ( pad.code, pad.name ) )
pad.code = 999
pad.name = "error, read failed"
if d7.isRead( isam, byref(pad), d7.ISFIRST ) == 0:
raise d7error( isam, "read first on primary index failed" )
else:
print "%d: %s" % ( pad.code, pad.name )
if d7.isStart( isam, byref(key2), 1, isam, d7.ISFIRST ) == 0:
raise d7error( isam, "switch to secondary index failed" );
if d7.isRead( isam, byref(pad), d7.ISFIRST ) == 0:
raise d7error( isam, "read first on secondary index failed" )
else:
print "%d: %s" % ( pad.code, pad.name )
result:
1: banana, junior 2: apple, macintosh
