[Python-de] Maskierung von %

Volker Helm Helm.volker at gmx.de
Mo Feb 5 09:21:28 CET 2007


Hi Stefan,

gute Idee, allerdings ist es bei mir wohl kein Problem der Sicherheit. Erstens wird das Script nur intern verwendet, zweitens wird der SQL fest definiert, nur um die entsprechenden Einschränkungen erweitert, so kann ich eine Funktion für 5 SQL-Abfragen einsetzen (Blöde Adresssuche nach Namen, Telefon etc.). 
Die zusätzlichen individuellen Parameter werden über feste Bindungen übergeben:
cur.execute("""select name,nummer from table where name like '%'||:p_begriff||'%'""", p_begriff = Suchbegriff)

Danke aber trotzdem,

Volker

-------- Original-Nachricht --------
Datum: Fri, 02 Feb 2007 15:02:39 +0100
Von: Stefan Schwarzer <sschwarzer at sschwarzer.net>
An: python-de at python.net
CC: 
Betreff: Re: [Python-de] Maskierung von %

> 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
> 
> 
> _______________________________________________
> python-de maillist  -  python-de at python.net
> http://python.net/mailman/listinfo/python-de

-- 
"Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ...
Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a