Actualmente estoy intentando buscar en una base de datos para capturar ciertos eventos. Mi consulta es, como tal,Psycopg2 usando el comodín causa TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
En pocas palabras necesito la consulta a mirar a través de una base de datos de eventos de calendario y devolver cualquier cosa con un resumen con la 'prueba' en ella y después del comienzo de este mes.
Esto devuelve los resultados esperados cuando se consulta desde la línea de comandos de la base de datos. Sin embargo cuando intento usarlo en mi script en Python con psycopg2 como tal:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
me sale un error de tipo
*** TypeError: 'dict' object does not support indexing
Haciendo un poco de googlear inicial suena como algo con la forma en que estoy usando mis comodines. Sin embargo, podría estar equivocado y probablemente me esté perdiendo algo simple que no veo. Esperemos que un par de ojos frescos de la comunidad puedan corregir mi noobishness;)
Hm que soluciona eso. Pero no creo que ese sea el problema raíz, ya que intenté librarme del diccionario y simplemente ejecutar la línea sin sustitución para ver si el comodín no se estaba escapando bien. Deshacerse del diccionario funcionó, entonces ¿por qué necesito escapar del comodín cuando se usa un diccionario? –
La sustitución de los parámetros subyacentes usa '%' como un carácter especial que significa 'hey, sustituye un valor de mi dict aquí'. Supongo que si no pasas el dict, esta lógica de parametrización se omite por completo, por lo que no hay posibilidad de que se confunda por la presencia de '%' en tu cláusula where. En otras palabras, es probable que asfixie * en * el paso de parametrización que ya no está haciendo. Entonces, si está pasando parámetros, necesita escapar del carácter% especial, de lo contrario no. –
Bien, eso tiene sentido. ¡Gracias Señor! –