diff options
| author | Federico Di Gregorio <fog@initd.org> | 2007-02-22 15:16:54 +0000 |
|---|---|---|
| committer | Federico Di Gregorio <fog@initd.org> | 2007-02-22 15:16:54 +0000 |
| commit | 6598a279e29147708fc8f8b16a58598521f1d7bd (patch) | |
| tree | f4645e213d19872ee2fc7c1d56fe94a8c9d1e51a /examples | |
| parent | c2e16b8901d7ab63b191df583005e31d63540425 (diff) | |
| download | psycopg2-6598a279e29147708fc8f8b16a58598521f1d7bd.tar.gz | |
Added support for per-cursor and per-connection typecasters.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/typecast.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/examples/typecast.py b/examples/typecast.py new file mode 100644 index 0000000..2b1d37d --- /dev/null +++ b/examples/typecast.py @@ -0,0 +1,67 @@ +# typecast.py - example of per-cursor and per-connection typecasters. +# +# Copyright (C) 2001-2007 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) + +class SimpleQuoter(object): + def sqlquote(x=None): + return "'bar'" + +import sys +import psycopg2 +import psycopg2.extensions + +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 + +curs = conn.cursor() +curs.execute("SELECT 'text'::text AS foo") +textoid = curs.description[0][1] +print "Oid for the text datatype is", textoid + +def castA(s, curs): + if s is not None: return "(A) " + s +TYPEA = psycopg2.extensions.new_type((textoid,), "TYPEA", castA) + +def castB(s, curs): + if s is not None: return "(B) " + s +TYPEB = psycopg2.extensions.new_type((textoid,), "TYPEB", castB) + +curs = conn.cursor() +curs.execute("SELECT 'some text.'::text AS foo") +print "Some text from plain connection:", curs.fetchone()[0] + +psycopg2.extensions.register_type(TYPEA, conn) +curs = conn.cursor() +curs.execute("SELECT 'some text.'::text AS foo") +print "Some text from connection with typecaster:", curs.fetchone()[0] + +curs = conn.cursor() +psycopg2.extensions.register_type(TYPEB, curs) +curs.execute("SELECT 'some text.'::text AS foo") +print "Some text from cursor with typecaster:", curs.fetchone()[0] + +curs = conn.cursor() +curs.execute("SELECT 'some text.'::text AS foo") +print "Some text from connection with typecaster again:", curs.fetchone()[0] + + |
