You are here
Reading BYTE Fields From An Informix Unload
Exporting records from an Informix table is simple using the UNLOAD TO command. This creates a delimited text file with a row for each record and the fields of the record delimited by the specified delimiter. Useful for data archive the files can easily be restored or processed with a Python script.
One complexity exists; if the record contains a BYTE (BLOB) field the contents are dumped hex encoded. This is not base64. To read these files take the hex encoded string value and decode it with the faux code-page hex: content.decode("hex")
The following script reads an Informix unload file delimited with pipes ("|") decoding the third field which was of the BYTE type.
rfile = open(ARCHIVE_FILE, 'r')
counter = 0
row = rfile.readline()
while row:
counter += 1
print(
'row#{0} @ offset {1}, len={2}'
.format(counter, rfile.tell(), len(row), )
)
blob_id, content, mimetype, filename, tmp_, tmp_ = row.split('|')
content = content.decode("hex")
print(' BLOBid#{0} "{1}" ({2}), len={3}'.format(
blob_id, filename, mimetype, len(content)
))
if mimetype == 'application/pdf':
if '/' in filename:
filename = filename.replace('/', '_')
wfile = open('wds/{0}.{1}.pdf'.format(blob_id, filename, ), 'wb')
wfile.write(content)
wfile.close()