He probado todo tipo de módulos de Python y de escape demasiado o en el camino equivocado.
¿Cuál es la mejor manera que he encontrado para escapar comillas ( » ,») en Python?

  • En qué contexto se desea el escape? Para python cadenas, o en una base de datos?
  • Es una parte de una consulta de base de datos Postgres.

9 Comentarios

  1. 27

    Si es parte de una consulta de Base de datos debe ser capaz de utilizar un Instrucción SQL con parámetros.

    Así como escapar de su cita, esta se tendrá que tratar con todos los caracteres especiales y los protegerá de Los ataques de inyección SQL.

    • +1: Si estás escapando de citas en una base de datos de consulta, que está haciendo el SQL mal.
    • +1 > yo estaba a punto de publicar la misma cosa 🙂
    • Excelente, ahora solo necesito una copia de Python 3.0.
    • ¿Por qué necesita Python 3.0 para utilizar una instrucción SQL con parámetros? Existen en todas las versiones y todos los Postgres interfaces Python.
    • Hay otras características que necesita usar Python 3.0.
    • Todos Python 3.0 características están disponibles en Python 2.6. El uso que.
    • Puede usted explicar por qué? Le gustaría tener un enlace para una mejor limpieza/manera de hacerlo que escapar de citas?

  2. 22

    Uso json.dumps.

    >>> import json
    >>> print json.dumps('a"bc')
    "a\"bc"
    • Esta falla cuando los caracteres Unicode se incluyen en la cadena: print json.dumps(u"£") imprime "\u00a3"
    • Dejando de lado la cuestión anterior, esto funciona muy bien, pero es una gran solución para un problema que puede ser abordado de manera más sencilla.
  3. 9

    La fácil y la manera estándar de cadenas de escape, y convertir otros objetos de forma programática, es el uso de la construcción en repr() función. Convierte un objeto en la representación que usted necesita para entrar en él con manual de código.

    E. g.:

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

    No extraño hacks, está construido y funciona para la mayoría de propósitos.

    • Esto probablemente no es lo que el OP quiere. repr no escapa las comillas pero también contiene la cadena de caracteres entre comillas simples. Por ejemplo: repr(«Rey») se convierte en ‘»King\’s Castle»‘ (nótese la envoltura comillas).
    • Termino con u'I\'m happy I am "here" now'.
  4. 2

    Respuesta de hilo viejo, pero la mejor manera de que aún faltan aquí..

    Si el uso de psycopg2, es ejecutar el método ha novación escapar.

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

    Nota, que se están dando dos argumentos al método execute (string y tupla), en lugar de usar Python % operador para modificar la cadena.

    Respuesta robado desde aquí: psycopg2 equivalente de mysqldb.escape_string?

  5. 2

    Triple comillas simples convenientemente encapsular las comillas simples a menudo se utiliza en las consultas SQL:

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

    Triple-doble comillas son mejores para escapar:

    string = """Esto va a extenderse a lo largo de 'comillas simples', "comillas dobles", 
    y literal EOLs todos en la misma cadena."""
    • No funciona en este caso: string = """This is a string "containing a quote""""
  7. 0

    De una solución a un más genérico problema, tengo un programa en el que necesitaba para almacenar cualquier conjunto de caracteres en un archivo plano de texto delimitado por tabuladores. Obviamente, disponer de las fichas en el ‘set’ estaba causando problemas.

    Lugar de output_f.write(str), he utilizado output_f.escribir(repr(str)), que resolvió mi problema.
    Es más lento para leer, como yo necesito a eval() de la entrada cuando la leí, pero, en general, hace el código más limpio, porque no necesito de verificación para la franja de los casos más.

    • repr/eval es una mala idea en este caso. Usted podría utilizar csv módulo en su lugar. Él se encargará de integrar las fichas en el campo para usted
  8. 0

    Para mi caso, yo estaba ahorrando un párrafo en contra de la base de datos y en algún lugar en el párrafo podría haber sido un texto con una sola cotización (example: Charlie's apple sauce was soggy)

    He encontrado que esto funciona mejor:

    database_cursor.execute('''INSERT INTO books.collection (book_name, book_quoted_text) VALUES ('%s', "%s")''' % (book_name, page_text.strip()))

    Te aviso que yo uso "" después de envolver la instrucción INSERT en '''

Dejar respuesta

Please enter your comment!
Please enter your name here