[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