diff options
| author | James Henstridge <james@jamesh.id.au> | 2008-05-05 10:37:24 +0800 |
|---|---|---|
| committer | James Henstridge <james@jamesh.id.au> | 2008-05-05 10:37:24 +0800 |
| commit | 938c456cee54e5642491f4214c23aee293df791e (patch) | |
| tree | 8c486596f838e44ee89413bbf6ca348fc71a7f14 /examples/lobject.py | |
| parent | fedfd53d544d7d1083703705c67637bd401d69e3 (diff) | |
| parent | 31ef9355c21a45d62fdb01293863fe26cd33109a (diff) | |
| download | psycopg2-938c456cee54e5642491f4214c23aee293df791e.tar.gz | |
Merge changes from psycopg2/trunk via psycopg2.r243.
Diffstat (limited to 'examples/lobject.py')
| -rw-r--r-- | examples/lobject.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/examples/lobject.py b/examples/lobject.py new file mode 100644 index 0000000..182c951 --- /dev/null +++ b/examples/lobject.py @@ -0,0 +1,79 @@ +# lobject.py - lobject example +# +# Copyright (C) 2001-2006 Federico Di Gregorio <fog@debian.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. + +## put in DSN your DSN string + +DSN = 'dbname=test' + +## don't modify anything below this line (except for experimenting) + +import sys +import psycopg2 + +if len(sys.argv) > 1: + DSN = sys.argv[1] + +print "Opening connection using dns:", DSN +conn = psycopg2.connect(DSN) +print "Encoding for this connection is", conn.encoding + +# this will create a large object with a new random oid, we'll +# use it to make some basic tests about read/write and seek. +lobj = conn.lobject() +loid = lobj.oid +print "Created a new large object with oid", loid + +print "Manually importing some binary data into the object:" +data = open("somehackers.jpg").read() +len = lobj.write(data) +print " imported", len, "bytes of data" + +conn.commit() + +print "Trying to (re)open large object with oid", loid +lobj = conn.lobject(loid) +print "Manually exporting the data from the lobject:" +data1 = lobj.read() +len = lobj.tell() +lobj.seek(0, 0) +data2 = lobj.read() +if data1 != data2: + print "ERROR: read after seek returned different data" +open("somehackers_lobject1.jpg", 'wb').write(data1) +print " written", len, "bytes of data to somehackers_lobject1.jpg" + +lobj.unlink() +print "Large object with oid", loid, "removed" + +conn.commit() + +# now we try to use the import and export functions to do the same +lobj = conn.lobject(0, 'n', 0, "somehackers.jpg") +loid = lobj.oid +print "Imported a new large object with oid", loid + +conn.commit() + +print "Trying to (re)open large object with oid", loid +lobj = conn.lobject(loid, 'n') +print "Using export() to export the data from the large object:" +lobj.export("somehackers_lobject2.jpg") +print " exported large object to somehackers_lobject2.jpg" + +lobj.unlink() +print "Large object with oid", loid, "removed" + +conn.commit() + +print "\nNow try to load the new images, to check it worked!" |
