DB-API 2.0 in pysqlite and pgdb

Roman Suzi rnd at onego.ru
Sat Jan 1 10:33:24 EST 2005


Happy New Year to all Pythoneers!

I am playing with pysqlite and pgdb and their DB-API conformancy.
It was quite interesting to know:

 - sqlite doesn't have mandatory helper-functions Date, Tim, etc.
   (due to an error int it's __init__, but this is quite obvious to correct
   or just to use mx.Date, mx.Time)

more serious mishaps with pgdb (postgresql-python):
it doesn't know how to quote date-time data for the objects
it has constructors itself.

>>> import pgdb
>>> c = pgdb.connect(database="template1")
>>> cu = c.cursor()
>>> o = pgdb.Time(10, 0, 0)
>>> cu.execute("select %(o);", vars())
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/local/lib/python2.3/site-packages/pgdb.py", line 189, in execute
    self.executemany(operation, (params,))
  File "/usr/local/lib/python2.3/site-packages/pgdb.py", line 201, in
executemany
    sql = _quoteparams(operation, params)
  File "/usr/local/lib/python2.3/site-packages/pgdb.py", line 283, in
_quoteparams
    x[k] = _quote(v)
  File "/usr/local/lib/python2.3/site-packages/pgdb.py", line 275, in _quote
    raise InterfaceError, 'do not know how to handle type %s' % type(x)
pgdb.InterfaceError: do not know how to handle type <type 'instance'>

This doesn't happen for strings or numbers:

>>> cu.execute("select %s;", ['s'])
>>> cu.execute("select %s;", [1])
>>> cu.execute("select %(k)s;", {'k': 123})
>>> o
<DateTimeDelta object for '10:00:00.00' at 401e8a48>

Thus, pgdb doesn't know how to handle DateTimeDelta.

The same with

>>> cu.execute("select %(o)s;", {'o': pgdb.Date(2005,1,1)})

  . . .
line 201, in executemany
    sql = _quoteparams(operation, params)
  File "/usr/local/lib/python2.3/site-packages/pgdb.py",
line 283, in _quoteparams
    x[k] = _quote(v)
  File "/usr/local/lib/python2.3/site-packages/pgdb.py",
line 275, in _quote
    raise InterfaceError, 'do not know how to handle type
%s' % type(x)
pgdb.InterfaceError: do not know how to handle type <type
'DateTime'>

(It was after I commented out exception catch:

#               except:
#                       raise OperationalError, "internal error in '%s'" % sql

in pgdb.py to see where the error occurs)


Am I missing something obvious or is it really a bug/feature of pgdb?

python2.3
postgresql-7.2.1
almost fresh mx.DateTime


Thank you!

Sincerely yours, Roman Suzi
-- 
rnd at onego.ru =\= My AI powered by GNU/Linux RedHat 7.3



More information about the Python-list mailing list