[Python-es] Django , error de enconding(?)

Manuel A. Estevez Fernandez stvzito en gmail.com
Mie Feb 9 16:49:31 CET 2011


El 09/02/11 08:48, Oswaldo Hernández escribió:
> El 09/02/2011 2:21, Manuel A. Estevez Fernandez escribió:
>> Hola ...
>>
>> Tengo el siguiente método en el archivo view:
>>
>> def busqueda(request):
>> error = False
>> if request.method =='GET':
>>
>> consulta = request.GET.get('consulta')
>> if not consulta:
>> error = True
>> else:
>>
>> from django.db import connection
>> cursor = connection.cursor()
>>
>> cursor.execute("""select * from
>> (select id_archivo_id,id_emite_id,nombre,rfc
>> from facturas_facturas f join facturas_entes e 
>> on(f.id_emite_id=e.id)) as q0
>> join
>> (select id_archivo_id,id_recibe_id,nombre as cliente,rfc as
>> rfc_cliente,serie,folio,fecha, total
>> from facturas_facturas f join facturas_entes e on(f.id_recibe_id=e.id))
>> as q1
>> using(id_archivo_id)
>> where lower(serie||folio) like lower('%%%s%%')
>> or lower(rfc_cliente) like lower('%%%s%%')
>> or lower(rfc) like lower('%%%s%%')
>> or lower(cliente) like lower('%%%s%%')
>> or lower(nombre) like lower('%%%s%%')
>> order by fecha
>> """, [ consulta,consulta,consulta,consulta,consulta ])
>> lista =[]
>> for row in cursor.fetchall():
>> dic =
>> {'id_archivo_id':row[0],'id_emite_id':row[1],'nombre_emite':row[2],'rfc_emite':row[3],'id_recibe_id':row[4],'nombre_recibe':row[5],'rfc_recibe':row[6],'serie':row[7],'folio':row[8],'fecha':row[9],'total':row[10]} 
>>
>> lista.append(dic)
>>
>> return
>> render_to_response("facturas/resultado.html",{"facturas":lista,"consulta":consulta}) 
>>
>> else:
>> return render_to_response("facturas/resultado.html")
>>
>> pero cuando intenta realizar la consulta a la cadena pasada como
>> parámetros le agrega un E'cadena' por ejemplo :
>>
>>     where lower(serie||folio) like lower('%E'kkl'%')
>>
>>
>> No tengo idea de que pueda ser, espero me puedan ayudar.
>>
>
> No dices que base de datos usas, pero tiene pinta se ser el escape 
> string de PostgreSQL [1]
>
> Si es ese el caso, esta funcionado correctamente. Otra cosa es que tu 
> estés haciendo bien la sustitución de parámetros.
>
> [1]
> <http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE> 
>
>
> Saludos,

Gracias por responder Oswaldo
La base de datos que utilizo es postgresql 9 la configuración es la 
siguiente:
         ENCODING = 'UTF8'
         TABLESPACE = pg_default
         LC_COLLATE = 'es_ES.UTF-8'
         LC_CTYPE = 'es_ES.UTF-8'

Sin embargo no he encontrado qué es lo que representa ese E'cadena'. La 
sustitución de parámetros la hago de esta forma:

cursor.execute("""select * from
     (select id_archivo_id,id_emite_id,nombre,rfc
     from facturas_facturas f join facturas_entes e 
on(f.id_emite_id=e.id)) as q0
     join
     (select id_archivo_id,id_recibe_id,nombre as cliente,rfc as
     rfc_cliente,serie,folio,fecha, total
     from facturas_facturas f join facturas_entes e 
on(f.id_recibe_id=e.id))
     as q1
     using(id_archivo_id)
     where lower(serie||folio) like lower('%%%s%%')
     or lower(rfc_cliente) like lower('%%%s%%')
     or lower(rfc) like lower('%%%s%%')
     or lower(cliente) like lower('%%%s%%')
     or lower(nombre) like lower('%%%s%%')
     order by fecha
     """, [ consulta,consulta,consulta,consulta,consulta ])

Es como viene recomendado en la documentación de Django.

Quedo a espera de tus comentarios.



Más información sobre la lista de distribución Python-es