[DB-SIG] DBAPI-2.0 clarifications

Federico Di Gregorio fog@mixadlive.com
Fri, 16 Mar 2001 13:52:57 +0100

Hi *,

	i am about to fix the lastest DBAPI-2.0 compliance quirks in
psycopg and to write a test suite but i need some clarifications on
some parts of the DBAPI. this will be a long post, sorry for that...

1/ cursors and transactions

  if a db support transactions, how two cursors derived from the same
  connection are supposed to see changes done to the db? if cursor A
  does an insert, is cursor B supposed to see the change suddenly or
  only after a commit() on the connection? imho, it would be better
  if the api specifies that a commit() is required, even if for the
  drivers that does not support transactions commit() is a no-op.

2/ nextset() and executemany()

  the api is not very clear on what a "set" is. it just says that not
  all db support "multiple result sets". imho, it is logical that a call 
  to executemany() (with a SELECT operation) produces multiple sets.
  is this the right interpretation or multiple result sets are something
  different? what should happen if a SELECT is passed to executemany()
  and the driver does not support nextset()?

3/ constructor objects

  are the constructor objects (Date, Time, Binary) expected to return
  a valid *already quoted* string? and what method should return the
  string, __repr__() or __str__()? i'll bet on __str__ but i am not
  sure. a little example to better explain: if a generate the object
  as t = module.Time('13:23:00') and then cursor.execute("SELECT * FROM
  table WHERE time > %(time)s", {'time':t}) the string that gets
  passed to the db is "SELECT * FROM table WHERE time > '13:23:00'",
  right? (note the quotes...)

4/ closing connections

  closing a connection does an implicit commit() on it? this is important
  because, following the file object style, most drivers implicitly close() 
  the connection when the object is collected by the gc and the user can
  find the program commiting changes even if it did not tell it to.

5/ the description field

  how are the precision and scale field to be interpreted? are the fields
  mandatory? sometimes obtaining the information in the description is
  plain slow (like the display_size, you have to scan every single row
  in the result set) or requires accessing system tables. very few programs
  use the most esoteric fields (most programs only use type_code and name.)
  what about (i know that this will make people flame me) add a new method
  to obtain a detailed description and put a shorter description in the
  current .description field?

thank you very much for your time,
federico (expectiong comments)
Federico Di Gregorio
MIXAD LIVE Chief of Research & Technology              fog@mixadlive.com
Debian GNU/Linux Developer & Italian Press Contact        fog@debian.org
              All programmers are optimists. -- Frederick P. Brooks, Jr.