Movatterモバイル変換
[0]ホーム
[Python-Dev] Re: [DB-SIG] API suggestion: expose 'quote' method
Stuart Bishopzen@shangri-la.dropbear.id.au
Tue, 10 Jun 2003 18:46:18 +1000
-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1=0DOn Thursday, June 5, 2003, at 07:40 PM, M.-A. Lemburg wrote:=0D=0D> Magnus Lyck=E5 wrote:=0D>> At 17:18 2003-06-04 -0700, Chris Cogdon wrote:=0D>>> So, perhaps what I really should be asking for is to include a =0D>>> specification for an interface, such as what I've suggested before, =0D=>>> but make that a OPTIONAL part of the specification. Ie, if it's easy ==0D>>> enough to expose, then the driver writers should expose it in the =0D=>>> standard form.=0D>>>=0D>>> Does THAT sound reasonable ?=0D>> Certainly. Many drivers implement things beyond the mandatory=0D>> standard, and if it's possible to get the extras compatible=0D>> across drivers, that's a big bonus in my opinion.=0D>=0D> No objection to adding a note to the spec about this. I still=0D> think that you have to flesh out a reasonable API for this,=0D> though, e.g. quoting should implemented on a per data type=0D> basis rather than on a per SQL statement basis.=0D=0DHere is a starting point, stolen from Perl's DBI spec (which has=0Dhad a fully functional quote method for almost a decade...)=0D=0DTranslated into Python to avoid abuse ;)=0D=0Dquote(value)=0D=0D Quote a value for use as a literal value in an SQL statement,=0D by escaping any special characters (such as quotation marks) =0Dcontained=0D within the string and adding the required type of outer quotation =0D=marks=0D=0D ::=0D=0D >>> 'SELECT foo FROM bar WHERE baz =3D %s' % =(con.quote("Don't"))=0D "SELECT foo FROM bar WHERE baz =3D 'Don''t'"=0D=0D For most database types, quote would return ``'Dont''t'``=0D (including the outer quotation marks).=0D=0D A value of ``None`` will be returned as the string ``NULL`` to=0D match how NULLs are represented in SQL.=0D=0D Quote will probably *not* be able to deal with all possible input=0D= (such as binary data or data containing newlines), and is not =0Drelated in=0D any way with escaping shell meta-characters. There is no need to =0D=quote=0D values being passed as bound parameters to the ``execute`` or=0D ``executemany`` methods.=0D=0Dquoteidentifier(name)=0Dquoteidentifier(schema, table)=0Dquoteidentifier(catalog, schema, table)=0D=0D Quote an idenntifier (table name etc.) for use in an SQL statement,=0D= by escaping any special characters (such as double quotation marks)=0D= it contains and adding the required type of outer quotation marks.=0D==0D Undefined names are ignored and the remainder are quoted and then=0D= joined together, typically with a dot (``.``) character. For =0Dexample::=0D=0D con.quoteidentifier(None, 'Her schema', 'My table')=0D=0D would, for most database types, return ``"Her schema"."My table"``=0D= (including all the double quotation marks).=0D=0D If three names are supplied then the first is assumed to be a =0Dcatalog=0D name. For example, for Oracle::=0D=0D >>> con.quoteidentifier('link', 'schema', 'table')=0D "schema"."table"@"link"=0D=0D- -- =0DStuart Bishop <zen@shangri-la.dropbear.id.au>=0Dhttp://shangri-la.dropbear.id.au/=0D=0D-----BEGIN PGP SIGNATURE-----Version: GnuPG v1.2.1 (Darwin)iD8DBQE+5Zrgh8iUz1x5geARAmi2AJ9DFepNqmCakqhErOXkzCANynzXqwCgniQ9KA6ggg4WGHl8gxuvcMzVNFA=3D=3DGMpq-----END PGP SIGNATURE-----
[8]ページ先頭