2009-05-22 15 views

Respuesta

24

Si es parte de una consulta de base de datos debe ser capaz de utilizar un Parameterized SQL Statement.

Así como escapar sus cotizaciones , esto va a hacer frente a todos los caracteres especiales y le protegerá de SQL injection attacks.

+15

+1: Si está escapando citas en una consulta de base de datos, está haciendo el SQL incorrecto. –

+0

+1> Estaba a punto de publicar lo mismo :-) –

+0

Excelente, ahora solo necesito una copia de Python 3.0. –

0

para una solución a un problema más genérico, tengo un programa en el que necesitaba para almacenar cualquier conjunto de caracteres en un archivo plano, delimitado por tabuladores Obviamente, tener pestañas en el 'conjunto' causaba problemas.

En lugar de output_f.write (str), utilicé output_f.write (repr (str)), que resolvió mi problema. Es más lento de leer, ya que necesito evaluar() la entrada cuando la leo, pero en general, hace que el código sea más claro porque ya no necesito verificar si hay casos adicionales.

+3

repr/eval es una mala idea en este caso. Podría usar el módulo 'csv' en su lugar. Se ocupará de insertar las pestañas en el campo para usted – jfs

1

cotizaciones triple-doble son los mejores para escapar:

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

No funcionará en este caso: 'string =" "" Esto es una cadena "que contiene una cita" "" "' – dolma33

5

La fácil y la forma estándar de escapar cadenas y convertir otros objetos a la forma programática, es usar la construcción en la función repr(). Convierte un objeto en la representación que necesitaría para ingresarlo con el código manual.

ej .:

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

sin trucos extraños, que está construido y simplemente funciona para la mayoría de los propósitos.

+3

Esto probablemente no es lo que el OP quiere. Repr escapa de las comillas, pero también envuelve la cadena entre comillas simples. Por ejemplo: repr ("King's Castle") se convierte en "King's Castle" (observe las comillas de ajuste). –

20

Utilice json.dumps.

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

Esto falla cuando se incluyen caracteres Unicode en la cadena: 'print json.dumps (u" £ ")' prints '" \ u00a3 "' –

2

Responder para el hilo de edad, pero la mejor manera aún falta aquí ..

Si se utiliza psycopg2, es ejecutar -method ha edifi escapar.

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

Tenga en cuenta, que usted está dando dos argumentos para ejecutar el método (cuerda y tupla), en lugar de utilizar el operador% de Python para modificar una cadena.

respuesta robado de aquí: psycopg2 equivalent of mysqldb.escape_string?

1

comillas simples triples serán convenientemente encapsular las comillas simples de uso frecuente en las consultas SQL:

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