Obecnie próbuję przeszukać bazę danych, aby pobrać określone zdarzenia. Moje zapytanie jest jako takiPsycopg2 przy użyciu symbolu wieloznacznego powoduje TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
Po prostu muszę zapytanie do przeglądania bazy zdarzeń kalendarza i nic powrócić z podsumowaniem z „test” w nim i po początku tego miesiąca.
Powoduje wyświetlenie oczekiwanych wyników przy zapytaniu z wiersza poleceń bazy danych. Jednak gdy próbuję użyć go w mój skrypt Pythona z psycopg2 jako takie:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
pojawia się błąd typu
*** TypeError: 'dict' object does not support indexing
robi jakieś początkowe Googling to brzmi jak coś z okazji używam moje symbole wieloznaczne. Mogę się mylić i prawdopodobnie brakuje mi czegoś prostego, czego nie widzę. Mam nadzieję, że świeża para oczu od społeczności może poprawić moją nieobliczalność;)
Hm, który to naprawi. Ale nie sądzę, że to jest główny problem, ponieważ próbowałem pozbyć się słownika i po prostu uruchomiłem linię bez podstawienia, aby sprawdzić, czy symbol wieloznaczny rzeczywiście nie został prawidłowo usunięty. Pozbycie się słownika zadziałało, więc dlaczego muszę uciec z symbolu wieloznacznego, gdy używany jest słownik? –
Podstawowa substytucja parametru używa "%" jako znaku specjalnego, co oznacza "hej, zastąp tutaj wartość z mojego dyktatu". Domyślam się, że jeśli nie przejdziecie przez dyktando, ta logika parametryzacji zostanie pominięta całkowicie, więc nie ma szans, aby się pomylić z obecnością "%" w klauzuli where. Innymi słowy, prawdopodobnie dławi * w * kroku parametryzacji, którego już nie robisz. Tak więc, jeśli podajesz parametry, musisz uciec ze specjalnego znaku%, w przeciwnym razie nie. –
OK, to ma sens. Dziękuję Panu! –