[Python-es] Problema en string

14 views
Skip to first unread message

Jean Carlos Rodrìguez

unread,
Aug 13, 2014, 1:13:37 PM8/13/14
to python espanol
Buenas tardes, les comento un problema que tengo, necesito guardar en base de datos una descripcion que dentro tiene el caracter " , estos los tomo de una archivo de texto, el problema que tengo es que al trata de guardar en base de datos este me da un error, porque la cadena la cierra cuando consigue el caracter ",

en el archivo txt
1
distancia recorrida 3' 2"

leo las lineas y se que para linea 1 es id y linea 2 desc

query_exec("""INSERT INTO table (id, desc) VALUES  ({0},"{1}") """.format(1,desc))

pero cuando lee el caracter " de pulgadas lo cierra y me da error, ya he tratado haciendo para combinaciones y nada, si alguie ha tenido un error asi, o hay una manera de resolverlo mas facil, y no rebentarme la cabeza se lo agradeceria.

Los valores los tomo como string desde el archivo

Python 2.7

Manuel A. Estevez Fernandez

unread,
Aug 13, 2014, 1:18:20 PM8/13/14
to Jean Carlos Rodrìguez, La lista de python en castellano
Necesitas colocar el caracter de escape correspondiente, usualmente es \.

Lo que pasa es que la db cuando intenta insertar el campo se encuentra con la siguiente cadena:

"distancia recorrida 3' 2""

debes cambiarlo por esto:

"distancia recorrida 3' 2[caracter de escape]""

Saludos.


by:

ISC. Manuel Alejandro Estévez Fernández



_______________________________________________
Python-es mailing list
Pyth...@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Jean Carlos Rodrìguez

unread,
Aug 13, 2014, 4:30:43 PM8/13/14
to Jorge Araya Navarro, La lista de python en castellano
Muchas gracias de ahi tengo un punto de partida, aunque no igual sigue el error porque no me reemplaza el caracter, seguire leyendo

Ah Jorge perdon uso MariaDB


El Miércoles, 13 de agosto, 2014 12:43 P.M., Jorge Araya Navarro <elco...@deshackra.com> escribió:



No seria conveniente también usar SQLAlchemy, tal vez tu proyecto sea un
proyecto pequeño y estés usando una base de datos en SQLite, pero te
podrías ahorrar este tipo de cosillas!

Si aun así deseas seguir por donde va tu proyecto, entonces te
recomiendo que implementes una función que te devuelva una cadena
saneada, algo tipo lo siguiente:

        def sanear(cadena):
            return cadena.replace('"', '\"')
> Python 2.7_______________________________________________


--
Pax et bonum.\nJorge Araya Navarro.\nDiseñador Publicitario, Programador Python y colaborador en Parabola GNU/Linux-libre\nhttps://es.gravatar.com/shackra



Daπid

unread,
Aug 13, 2014, 4:52:20 PM8/13/14
to Jean Carlos Rodrìguez, La lista de python en castellano

2014-08-13 19:08 GMT+02:00 Jean Carlos Rodrìguez <jeancar...@yahoo.com.dmarc.invalid>:

query_exec("""INSERT INTO table (id, desc) VALUES  ({0},"{1}") """.format(1,desc))

pero cuando lee el caracter " de pulgadas lo cierra y me da error, ya he tratado haciendo para combinaciones y nada, si alguie ha tenido un error asi, o hay una manera de resolverlo mas facil, y no rebentarme la cabeza se lo agradeceria.

Python puede parsear esa expresión sin problemas. Las triples comillas hacen que cuando sólo hay una, sea ignorada. El problema está en la base de datos. Mi primera idea sería averiguar si esos caracteres están soportados, y si lo están, cómo se escapan.

¿Cuál es el mensaje de error? Ayuda mucho, siempre conviene ponerlo.


/David.

Jean Carlos Rodrìguez

unread,
Aug 13, 2014, 5:06:20 PM8/13/14
to Daπid, La lista de python en castellano
Obtengo el famoso error 1064, error de sintaxis

Ander Garmendia

unread,
Aug 13, 2014, 5:15:38 PM8/13/14
to Jean Carlos Rodrìguez, La lista de python en castellano

¿Que librería / driver estás utilizando para conectarte a la  base de datos?
 
Mira la documentación para ver si la librería te ofrece un método con binding de parámetros y olvídate tu de formatear el string a ejecutar.

Jhonatan Sneider Salguero Villa

unread,
Aug 13, 2014, 5:18:07 PM8/13/14
to La lista de python en castellano
error, es:

cur.execute("INSERT INTO table (id, desc) VALUES  (?,?)", (1, desc))

Jean Carlos Rodrìguez

unread,
Aug 13, 2014, 5:35:47 PM8/13/14
to La lista de python en castellano
Perdon por la demas informacion que falto, la conexion la hago con PyQt4 (QtSql), aunque por ahora logre resolver de la manera mas cruel reemplaze el " por (plg) y luego hago los reverso en las busqueda, se que no es una solucion, pero por ahora para mi si lo es, hasta que pueda revisar bien la documentacion.

Si logro conseguir una solucion les informare.

Jhonatan Sneider Salguero Villa

unread,
Aug 13, 2014, 5:45:58 PM8/13/14
to La lista de python en castellano
El método execute permite pasar los parámetros de la consulta como argumentos, con lo cual es la misma base de datos que se encarga de escapar los datos.

con sqlite3 seria algo como lo siguiente (aunque vale para otras base de datos)

import sqlite3

con = sqlite3.connect("base_datos")
cur = con.cursor()
cur.execute("INSERT INTO table (id, desc) VALUES  (?,?)", 1, desc)



Jhonatan.


Reply all
Reply to author
Forward
0 new messages