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@sschwarzer.net> An: python-de@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@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