[Python-de] Maskierung von %

Volker Helm Helm.volker at gmx.de
Mo Feb 5 15:24:28 CET 2007


Ich sollte vielleicht mal klarstellen, dass mein Problem gelöst ist.

Es war folgendes, in einem SQL wird bei mir abgehandelt, ob es einen Rabatt gibt und um welche Art es sich handelt ('€', '%', 'Mengenrabatt').
Leider wird dieser SQL im Anschluß erweitert, abhängig, ob es sich um eine Position eines Auftrages handelt, oder um alle. Dies wird mittels:
sql = """select blub, 
                rabatt,
                case when rabatttyp = 0
                 then '%'
                 else '€' end rabattyp
          from table
         where auftrag = :auftrag
          %s"""

sqlauftrag = ""
sqlposition = "and position = :position"

erweitert. Durch das vorhanden sein des Prozentzeichens klappt der gesamte Vorgang nicht, habe die Maskierung in der Dokumentation leider überlesen.

Sollten Begriffe mit like gesucht werden, werden die entsprechenden Werte entweder vom Benutzer als '%Hans%Müller%' eingegeben werden müssen oder werden entschprechend vorne und hinten um ein '%' Zeichen erweitert. 

suchbegriff = '%'+Eingabe.strip('%')+'%'

Der Suchbegriff wird dann mittels eines Dictionary 

variablen = {'Suchbegriff': suchbegriff}

und der Anweisung

cur.execute(sql,variablen)

verbunden und abgeschickt. 

So, noch einen schönen Tag,

Volker

> Hallo Stefan,
> 
> > suchtext = "Python's Prozentzeichen"
> > cursor.execute(
> >   "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'",
> >   {'suchtext': suchtext})  # vom DB-Adapter eingesetzt - besser
> 
> Sicher, dass Du das so willst? Denn falls der 'suchtext' ein
> Leer-/Sonderzeichen enthält, wird er escaped. Dann bekommst Du diese
> query:
> 
>   ... LIKE '%'such mich'%' ...
> 
> Das ist sicher nicht das gewünschte :-)
> 
> Besser _alles_ Quoting dem Treiber überlassen, das kann das im
> Zweifelsfall besser. Also:
> 
> suchtext = "Python's Prozentzeichen"
> cursor.execute(
>   "SELECT text FROM table WHERE text LIKE %(suchtext)s",
>   {'suchtext': '%' + suchtext + '%' })
> 
> 
> - --
> Schönen Gruß - Regards
> Hartmut Goebel
> 
> | Hartmut Goebel             | IT-Security -- effizient |
> | h.goebel at goebel-consult.de | www.goebel-consult.de    |
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.5 (GNU/Linux)
> Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org
> 
> iQEVAwUBRccwkczajR0mSa83AQKTOQgAgBzEaIMsSufn8b1CJoMk80LLZestubcj
> z42+WYgpCKFclN9+NFkVAcksoWPXdBX4JwX/LXiM0uCHYU009lCKOPbtOLJqVrTC
> k/iMoXuWvSWk31W0IysHdhgg0jBnBWogsqh0RzcMexzMCMBsMzx6z4H6c5gYweI6
> 0VdF89ia5gHHPqca3DErUrrMOcV5Uzcs9vpq3S0RN1fHCN0gcDwQo4qgRgdMCgMQ
> aLNOlm0GL2I1mSALJj1skWVAr8wkNC4LaGY/z+gL86kA1LNVyQu1NOElFm00yT+Q
> blRKI4bHCzfVFRVDrrRIP/nml/zSO12uLl+DRdH2Rgj/7Le0we4AMQ==
> =5w97
> -----END PGP SIGNATURE-----
> 
> _______________________________________________
> 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