Attualmente sto tentando di cercare un database per afferrare determinati eventi. La mia domanda è, come talePsycopg2 utilizza caratteri jolly TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
In poche parole ho bisogno della query per guardare attraverso un database di eventi di calendario e restituire qualche cosa con un riassunto con 'test' in essa e dopo l'inizio di questo mese.
Questo restituisce i risultati previsti quando richiesto dalla riga di comando del database. Tuttavia quando tento di usare nel mio script Python con psycopg2 in quanto tale:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
ottengo un errore di tipo
*** TypeError: 'dict' object does not support indexing
Facendo qualche iniziale Googling suona come qualcosa con il modo in cui sto usando i miei jolly Potrei sbagliarmi e probabilmente mi manca qualcosa di semplice che non vedo. Speriamo che un nuovo paio di occhi della community possa correggere il mio niente di niente;)
Hm che lo risolve. Ma non credo che questo sia il problema alla radice da quando ho provato per un capriccio di eliminare il dizionario e di eseguire semplicemente la linea senza sostituzione per vedere se il carattere jolly non fosse effettivamente scappato a destra. Liberarsi del dizionario ha funzionato così perché ho bisogno di sfuggire al carattere jolly quando viene utilizzato un dizionario? –
La sostituzione del parametro sottostante utilizza '%' come carattere speciale che significa 'hey, sostituisci un valore dal mio dettato qui'. La mia ipotesi è che se non si passa il dict, questa logica di parametrizzazione viene saltata interamente, quindi non c'è possibilità che venga confusa dalla presenza di '%' nella clausola where. In altre parole, è probabile che soffochi * in * il passo di parametrizzazione che non stai più facendo. Quindi, se passi dei parametri devi sfuggire al carattere% speciale, altrimenti no. –
Ok, questo ha senso. Grazie Signore! –