summaryrefslogtreecommitdiff
path: root/lib/psycopg1.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/psycopg1.py')
-rw-r--r--lib/psycopg1.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/psycopg1.py b/lib/psycopg1.py
new file mode 100644
index 0000000..45a1783
--- /dev/null
+++ b/lib/psycopg1.py
@@ -0,0 +1,76 @@
+"""psycopg 1.1.x compatibility module
+
+This module uses the new style connection and cursor types to build a psycopg
+1.1.1.x compatibility layer. It should be considered a temporary hack to run
+old code hile porting to psycopg 2. Import as follows:
+
+ from psycopg import psycopg1 as psycopg
+"""
+# psycopg/psycopg1.py - psycopg 1.1.x compatibility module
+#
+# Copyright (C) 2003-2004 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.
+
+import _psycopg as _2psycopg
+from psycopg.extensions import cursor as _2cursor
+from psycopg.extensions import connection as _2connection
+
+from psycopg import *
+del connect
+
+
+def connect(*args, **kwargs):
+ """connect(dsn, ...) -> new psycopg 1.1.x compatible connection object"""
+ kwargs['connection_factory'] = connection
+ return _2psycopg.connect(*args, **kwargs)
+
+
+class connection(_2connection):
+ """psycopg 1.1.x connection."""
+
+ def cursor(self):
+ """cursor() -> new psycopg 1.1.x compatible cursor object"""
+ return _2connection.cursor(self, cursor_factory=cursor)
+
+
+class cursor(_2cursor):
+ """psycopg 1.1.x cursor.
+
+ Note that this cursor implements the exact procedure used by psycopg 1 to
+ build dictionaries out of result rows. The DictCursor in the
+ psycopg.extras modules implements a much better and faster algorithm.
+ """
+
+ def __build_dict(self, row):
+ res = {}
+ for i in range(len(self.description)):
+ res[self.description[i][0]] = row[i]
+ return res
+
+ def dictfetchone(self):
+ row = _2cursor.fetchone(self)
+ return self.__build_dict(row)
+
+ def dictfetchmany(self, size):
+ res = []
+ rows = _2cursor.fetchmany(self, size)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+
+ def dictfetchall(self):
+ res = []
+ rows = _2cursor.fetchall(self)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+