psycopg1 compatibility module.

This commit is contained in:
Federico Di Gregorio 2005-04-03 06:13:24 +00:00
parent 5db7764207
commit fdb68599c7
4 changed files with 92 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2005-04-03 Federico Di Gregorio <fog@debian.org>
* psycopg/psycopgmodule.c (psyco_connect): factory ->
connection_factory.
* lib/psycopg1.py: added psycopg 1.1.x compatibility module.
2005-03-29 Federico Di Gregorio <fog@debian.org>
* psycopg/pqpath.c (pq_is_busy): Staring from bug report from
@ -6,6 +13,13 @@
2005-03-24 Federico Di Gregorio <fog@debian.org>
* psycopg/adapter_binary.c (binary_escape): propagated Andrea's
fix to binary adapter.
* psycopg/adapter_qstring.c (qstring_quote): applied patch from
Andrea Arcangeli to fix allocation failures (>4Gb) on 64 bit
arches.
* psycopg/typecast_array.c (typecast_array_tokenize): much better
tokenization code.

View File

@ -20,8 +20,6 @@ small and fast, and stable as a rock.
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
__all__ = ['extensions', 'extras', 'tz', 'pool']
# import the DBAPI-2.0 stuff into top-level module
from _psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID

76
lib/psycopg1.py Normal file
View File

@ -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

View File

@ -102,7 +102,8 @@ psyco_connect(PyObject *self, PyObject *args, PyObject *keywds)
char *host=NULL, *port=NULL, *sslmode=NULL;
static char *kwlist[] = {"dsn", "database", "host", "port",
"user", "password", "sslmode", "factory", NULL};
"user", "password", "sslmode",
"connection_factory", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|sssssssO", kwlist,
&dsn, &database, &host, &port,