[Python-de] Maskierung von %

Paul Rauch LightLan at lightlan.de
Fr Feb 2 18:48:52 CET 2007


Stefan Schwarzer schrieb:
> Hi Volker,
> 
> On 2007-02-02 14:09, Volker Helm wrote:
>> Da im Text häufiger ein "wert like '%suchbegriff%'" steht,
>> müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam
>> und unleserlich :(
> 
> dazu noch ein Hinweis: Setze den Suchbegriff als Argument
> in cursor.execute ein. Dadurch werden Zeichen, die in SQL
> Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten
> auch \), richtig maskiert.
> 
> Also nicht
> 
> suchtext = "Python's Prozentzeichen"
> cursor.execute(
>   "SELECT text FROM table WHERE text LIKE '%%%s%%'" %
>   suchtext)  # selbst eingesetzt - unsicher
> 
> sondern
> 
> suchtext = "Python's Prozentzeichen"
> cursor.execute(
>   "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'",
>   {'suchtext': suchtext})  # vom DB-Adapter eingesetzt - besser
> 
> Beachte, dass hier der execute-Methode zwei Argumente übergeben
> werden. Außerdem musst du die Prozentzeichen am Anfang und Ende
> des Strings nicht verdoppeln (wenn der Datenbankadapter sauber
> programmiert ist). Wie einzusetzende Zeichenketten zu formatieren
> sind und wie das zweite Argument von cursor.execute aussehen
> muss, hängt vom konkreten Datenbankadapter ab. Näheres in der
> DB-API 2.0, an die sich alle neueren Adapter halten sollten,
> http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von
> dir verwendeten Datenbankadapter.
> 
> Viele Grüße
> Stefan
> 

hm..

dass verstehe ich ehrlich gesagt nicht.
ich will doch nicht das ganze query escapen, sondern nur bestimmte
einzelne eingaben von usern.

mfg Light Lan