Psycopg2 usando comodín causa TypeError

Actualmente estoy intentando buscar en una base de datos para capturar ciertos eventos. Mi consulta es como tal

SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01' 

En pocas palabras, necesito la consulta para buscar en una base de datos de eventos del calendario y devolver cualquier cosa con un resumen con “prueba” 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 bash usarlo en mi script 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 

Al hacer algunas búsquedas iniciales en Google, suena como algo parecido a la forma en que uso mis comodines. Sin embargo, podría estar equivocado y probablemente me esté perdiendo algo simple que no veo. Ojalá un par de ojos nuevos de la comunidad puedan corregir mi novedad;)

No estoy seguro si esta es la raíz completa de su problema, pero creo que necesita escapar de sus comodines o la lógica de parametrización se confundirá.

 SELECT * FROM events WHERE summary ILIKE E'%%test%%' AND start_time > %(begin)s 

Creo que %% es el escape correcto, pero podría ser \%

mi conjetura es algo acerca de tu “%” es confuso python. en psycopg2 hago mis comodines “me gusta” en consultas como esta:

 #!/usr/bin/python import sys,os.path,psycopg2 db=psycopg2.connect("dbname=music") for line in sys.argv[1::]: cursor=db.cursor() key="%"+line+"%" cursor.execute("select count(*) from pool where path like %s",(key,)) if cursor.fetchone()[0] != 1: sys.stderr.write("ambiguous stem or no such song") sys.exit(-1) cursor.execute("insert into spool select path from pool where path like %s",(key,)) cursor.close() db.commit() db.close() 

con cadenas de búsqueda proporcionadas por el usuario como en este script, probablemente querrá escapar de cualquier “%” que haya en ellas, lo que sospecho que de otro modo serían comodines legítimos en la consulta, pero aún no he llegado tan lejos