[DB-SIG] API suggestion: expose 'quote' method
chris at cogdon.org
Mon Jun 2 21:31:29 EDT 2003
I'd like to make the following proposal for the next revision of the
New method to 'database' object: quote.
It has exactly the same parameter parsing semantics as the 'execute'
method, but instead of sending the statement to the DBMS, it simply
returns the string after the parameters have been quoted.
In effect, assuming the following:
cur = db.cursor ()
the following two statements would be equivalent:
cur.execute ( "some sql statement", parameters )
cur.execute ( db.quote ( "some sql statement", parameters ) )
- There are many instances where you want to 'build up' the SQL
statement in pieces. For example, I have an application where I create
one object representing the interface to the database. To search for
records of a particular class, you create a 'criteria' object, and pass
that to the method of the database object. The criteria object is
responsibile for building the SQL 'WHERE" clause necessary to find the
required objects. The database method is responsible for building the
tables necessary for the where to function correctly.
This would be VERY hard if I had to organise the SQL, and the list of
parameters independantly before finally passing it to the 'execute'
method which binds the two together.
- Some API's make their quoting functions available (pg has 'quote',
pyPgSQL has '_quote'), but some do not (eg PoPy and psycopg) mostly
because they're written in C, and requires explicit efforts to expose
functions (as it should be, but it's inconvienient in this case).
- It would be best to have it as a method of a database object, even
though typical implementation would not require knowing anything about
the connection. This way, I can write code that is 'database agnostic',
but ensure that the right version of 'quote' is called when required.
So... any support for this change? Any comments?
("`-/")_.-'"``-._ Chris Cogdon <chris at cogdon.org>
. . `; -._ )-;-,_`)
(v_,)' _ )`-.\ ``-'
_.- _..-_/ / ((.'
((,.-' ((,/ fL
More information about the DB-SIG