Ho provato tutti i tipi di moduli Python ed entrambi escono troppo o nel modo sbagliato. Qual è il modo migliore che hai trovato per sfuggire le virgolette (", ') in Python?Un buon modo per evitare le virgolette in una stringa di query del database?
risposta
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.
+1: se stai evadendo le virgolette in una query di database, stai facendo il SQL sbagliato. –
+1> Stavo per pubblicare la stessa cosa :-) –
Eccellente, ora ho solo bisogno di una copia di Python 3.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.
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
Se stai usando psycopg2 che ha un metodo per archi in fuga: psycopg2.extensions.adapt()
Vedere How to quote a string value explicitly (Python DB API/Psycopg2) per la risposta completa
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."""
Non funzionerà in questo caso: 'string =" "" Questa è una stringa "contenente una citazione" "" "' – dolma33
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.
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). –
Utilizzare json.dumps
.
>>> import json
>>> print json.dumps('a"bc')
"a\"bc"
Questo errore si verifica quando i caratteri Unicode sono inclusi nella stringa: 'print json.dumps (u" £ ")' stampa '" \ u00a3 "' –
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?
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''')
In quale contesto si desidera che il fuggire? Per le stringhe Python o in un database? – workmad3
Fa parte di una query del database Postgres. –