Vorrei eseguire una query PostgreSQL in Python utilizzando psycopg2, che filtra per una colonna di tipo timestamp without timezone
. Ho una lunga lista di valori consentiti per il timestamp (piuttosto che una gamma) e psycopg2 gestisce comodamente array, così ho pensato che questo dovrebbe funzionare:Come specificare il parametro psycopg2 per un array per timestamps (datetimes)
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s)
Il parametro times
è una lista di oggetti datetime
. Ho anche provato psycopg2.Timestamp()
. Entrambi si traduce in WHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00', '2009-07-07T00:00:00', ...])
e, purtroppo, che non riesce con il seguente errore:
operator does not exist: timestamp without time zone = text
LINE 3: WHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00', '2009-07-07T00:00:00', ...]
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Ho confermato questo pgAdmin pure, quindi non è solo psycopg2. Quello che sembra accadere è che Postgres non converte implicitamente una serie di stringhe in una matrice di timestamp. Converte una stringa singola e l'array funziona correttamente se aggiungo esplicitamente ::timestamp
a ciascun elemento in pgAdmin, ma non so come farlo in psycopg2.
Qual è il modo migliore per farlo, oltre a dimenticare i parametri DB-API e la semplice creazione della lunga stringa di timestamp manualmente? C'è un modo in cui posso farlo per trasmettere al tipo corretto?