我花了一个小时左右的时间在谷歌上搜索,尝试了各种组合,但都没有成功。
我希望从一个表中进行选择,其中的一列是varchar(255)的一维数组。
在普通SQL中,我使用以下查询:
SELECT * FROM customers WHERE email_domains @> '{"@google.com"}';
那很好。 但是现在我想通过代码来做同样的事情。所以我尝试了这个:
domain = '@google.com'
sql = "SELECT * FROM customers WHERE email_domains @> '{%s}';"
cursor.execute( sql, [domain] )
result = cursor.fetchall()
以及转义的'和'的各种组合的全部负载,但我无法使其正常工作。
我得到的错误是:
ERROR: malformed array literal: "{"
LINE 1: ... * FROM customers WHERE email_domains @> '{'@goo....
^
DETAIL: Unexpected end of input.
感谢所有帮助:)
答案 0 :(得分:2)
好的。有时我会因自己的愚蠢而惊奇……
(对我而言)解决方案是简单地将我的sql重组为:
SELECT * FROM customers WHERE %s = ANY(email_domains);
感谢所有提出建议的人。
答案 1 :(得分:1)
psycopg2为您将列表转换为数组。我目前无法对此进行轻松测试,但是我认为这应该可以工作:
domain = ['@google.com']
# Let psycopg2 do the escaping for you, don't put quotes in there
sql = "SELECT * FROM customers WHERE email_domains @> %s;"
cursor.execute( sql, [domain] )
result = cursor.fetchall()