summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorFederico Di Gregorio <fog@initd.org>2007-02-22 15:16:54 +0000
committerFederico Di Gregorio <fog@initd.org>2007-02-22 15:16:54 +0000
commit6598a279e29147708fc8f8b16a58598521f1d7bd (patch)
treef4645e213d19872ee2fc7c1d56fe94a8c9d1e51a /examples
parentc2e16b8901d7ab63b191df583005e31d63540425 (diff)
downloadpsycopg2-6598a279e29147708fc8f8b16a58598521f1d7bd.tar.gz
Added support for per-cursor and per-connection typecasters.
Diffstat (limited to 'examples')
-rw-r--r--examples/typecast.py67
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]
+
+