2009-05-22 13 views

risposta

24

Se si tratta di una parte di una query di database si dovrebbe essere in grado di utilizzare un Parameterized SQL Statement.

Così come fuggire citazioni , questo si occuperà di tutti i caratteri speciali e vi proteggerà da SQL injection attacks.

+15

+1: se stai evadendo le virgolette in una query di database, stai facendo il SQL sbagliato. –

+0

+1> Stavo per pubblicare la stessa cosa :-) –

+0

Eccellente, ora ho solo bisogno di una copia di Python 3.0. –

0

per una soluzione ad un problema più generico, ho un programma in cui avevo bisogno di memorizzare qualsiasi set di caratteri in un file flat, delimitato da tabulazione Ovviamente, avere delle schede nel 'set' stava causando problemi

Invece di output_f.write (str), ho usato output_f.write (repr (str)), che ha risolto il mio problema. È più lento leggere, dato che ho bisogno di eval() l'input quando lo leggo, ma nel complesso, rende il codice più pulito perché non ho più bisogno di controllare i casi di frange.

+3

repr/eval è una cattiva idea in questo caso. Potresti usare invece il modulo 'csv'. Si prenderà cura delle schede di inserimento nel campo per te – jfs

1

citazioni tripla doppia sono i migliori per sfuggire:

string = """This will span across 'single quotes', "double quotes", 
and literal EOLs all in the same string."""
+3

Non funzionerà in questo caso: 'string =" "" Questa è una stringa "contenente una citazione" "" "' – dolma33

5

La facile e modo standard per evitare stringhe e convertire altri oggetti in forma programmatica, consiste nell'utilizzare la funzione build in repr(). Converte un oggetto nella rappresentazione di cui avresti bisogno per inserirlo con il codice manuale.

Es .:

s = "I'm happy I am \"here\" now" 
print repr(s) 
>> 'I\'m happy I am "here" now' 

Nessun hack strano, è costruito in e semplicemente funziona per la maggior parte degli scopi.

+3

Questo probabilmente non è ciò che l'OP vuole. repr fa sfuggire le virgolette ma avvolge anche la stringa tra virgolette singole. Ad esempio: repr ("King's Castle") diventa "King's Castle" (notare le virgolette di avvolgimento). –

20

Utilizzare json.dumps.

>>> import json 
>>> print json.dumps('a"bc') 
"a\"bc" 
+4

Questo errore si verifica quando i caratteri Unicode sono inclusi nella stringa: 'print json.dumps (u" £ ")' stampa '" \ u00a3 "' –

2

Reply per thread vecchio, ma il miglior modo manca ancora qui ..

Se si utilizza psycopg2, è eseguire -Metodo è buildin fuga.

cursor.execute("SELECT column FROM table WHERE column=%s AND column2=%s", (value1, value2)) 

nota, che si stanno dando due argomenti per eseguire il metodo (archi e tuple), invece di utilizzare operatore di Python% di modificare stringa.

risposta rubato da qui: psycopg2 equivalent of mysqldb.escape_string?

1

virgolette singole triple saranno convenientemente incapsulare le virgolette singole, spesso utilizzate in query SQL:

c.execute('''SELECT sval FROM sdat WHERE instime > NOW() - INTERVAL '1 days' ORDER BY instime ASC''') 
Problemi correlati