[Python-de] Maskierung von %

Stefan Schwarzer sschwarzer at sschwarzer.net
Fr Feb 2 15:02:39 CET 2007


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