給定一個名爲namespace_list
的表,其中INTEGER[]
列爲namespace_ids
。Psycopg2「operator does not exist:integer [] = integer」error
我有以下查詢:
query = SELECT * FROM namespace_list WHERE namespace_ids = ANY(%s)
and application_id=%s
這我作爲執行:
cur.execute(query, data)
以及其中數據是:
data = ([1, 2], 1)
我收到以下錯誤:
operator does not exist: integer[] = integer at character 50\nHINT:
No operator matches the given name and argument type(s).
You might need to add explicit type casts.
爲什麼這不起作用?看看http://www.postgresql.org/message-id/[email protected]om和其他關於Postgres Arrays的教程,似乎我有正確的查詢。
我跟着http://initd.org/psycopg/docs/usage.html#adapt-list也有一個例子。我的查詢有什麼問題,或者我使用psycopg2數組的方式?
怎麼回事? Psycopg2表示我們可以這樣做:'ids = [10,20,30]cur.execute(「SELECT * FROM data WHERE id = ANY(%s);」,(ids,))''。這正是我正在做的。 – darksky
我需要檢查完全匹配。當使用數據'([1,2],1)'進行查詢'SELECT * FROM namespace_list WHERE namespace_ids = ARRAY%s和application_id =%s'時,我得到:'語法錯誤在或接近於','在字符64' 。爲什麼現在不接受數組? – darksky
因爲這不是你在做什麼。 'where id = ANY(%s)'因爲在左邊你有一個標量而不是數組。但是你說namespace_ids是ab數組,所以(看我的答案)它不起作用。 – fog