type の列でフィルタリングする psycopg2 を使用して、Python で PostgreSQL クエリを実行したいと思いますtimestamp without timezone
。(範囲ではなく) タイムスタンプに許可される値の長いリストがあり、psycopg2 は便利に配列を処理するので、これはうまくいくはずだと思いました:
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s)
times
パラメータはdatetime
オブジェクトのリストです。私も試しpsycopg2.Timestamp()
ました。どちらも変換されWHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00', '2009-07-07T00:00:00', ...])
、残念ながら次のエラーで失敗します。
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.
これはpgAdminでも確認済みですので、psycopg2だけではありません。起こっているように見えるのは、Postgres が文字列の配列をタイムスタンプの配列に暗黙的に変換しないということです。pgAdminの各要素に明示的に追加すると、単一の文字列が正常に変換され、配列::timestamp
が正常に機能しますが、psycopg2でそれを行う方法がわかりません。
DB-API パラメータを忘れて、タイムスタンプの長い文字列を手動で作成する以外に、これを行う最善の方法は何ですか? 正しい型にキャストする方法はありますか?