提交 f393ee06 编写于 作者: D D'Arcy J.M. Cain

Change the debug variable to allow better control by the caller over how

debug output is managed.  The user can continue to use the current method
of passing a formatting string to have a replacement done and output will
be sent to the standard output exactly as it did before.  In addition they
can set it to a file object, sys.stderr for example, and the query string
will be printed to it.  Thay can also set it to a method (function) and the
query string will be passed to that method giving them the maximum flexibility
to do whatever they want with the query string.

I will be working with the PyGreSQL documentation shortly and at that time
will properly document this feature.
上级 04c8785c
......@@ -6,6 +6,7 @@
# "Classic" interface. For DB-API compliance use the pgdb module.
from _pg import *
from types import *
import string, re, sys
# utility function
......@@ -73,10 +74,15 @@ class DB:
pg_attribute.attisdropped = 'f'""").getresult():
self.__pkeys__[rel] = att
def _do_debug(self, s):
if not self.debug: return
if type(self.debug) == StringType: print self.debug % s
if type(self.debug) == FunctionType: self.debug(s)
if type(self.debug) == FileType: print >> self.debug, s
# wrap query for debugging
def query(self, qstr):
if self.debug != None:
print self.debug % qstr
self._do_debug(qstr)
return self.db.query(qstr)
# If third arg supplied set primary key to it
......@@ -158,7 +164,7 @@ class DB:
fnames = self.get_attnames(xcl)
if type(arg) == type({}):
if type(arg) == DictType:
# To allow users to work with multiple tables we munge the
# name when the key is "oid"
if keyname == 'oid': k = arg['oid_%s' % xcl]
......@@ -178,7 +184,7 @@ class DB:
(xcl, string.join(fnames.keys(), ','),\
cl, keyname, _quote(k, fnames[keyname]))
if self.debug != None: print self.debug % q
self._do_debug(q)
res = self.db.query(q).dictresult()
if res == []:
raise error, \
......@@ -205,7 +211,7 @@ class DB:
try:
q = "INSERT INTO %s (%s) VALUES (%s)" % \
(cl, string.join(n, ','), string.join(l, ','))
if self.debug != None: print self.debug % q
self._do_debug(q)
a['oid_%s' % cl] = self.db.query(q)
except:
raise error, "Error inserting into %s: %s" % (cl, sys.exc_value)
......@@ -241,7 +247,7 @@ class DB:
try:
q = "UPDATE %s SET %s WHERE %s" % \
(cl, string.join(v, ','), where)
if self.debug != None: print self.debug % q
self._do_debug(q)
self.db.query(q)
except:
raise error, "Can't update %s: %s" % (cl, sys.exc_value)
......@@ -270,7 +276,7 @@ class DB:
def delete(self, cl, a):
try:
q = "DELETE FROM %s WHERE oid = %s" % (cl, a['oid_%s' % cl])
if self.debug != None: print self.debug % q
self._do_debug(q)
self.db.query(q)
except:
raise error, "Can't delete %s: %s" % (cl, sys.exc_value)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册