【发布时间】:2019-10-31 07:10:45
【问题描述】:
我花了一个小时左右的时间在谷歌上搜索并尝试了各种组合,但没有成功。
我希望从其中一列是 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.
感谢所有帮助:)
【问题讨论】:
-
看起来 '@google' 中的 @g 作为数组运算符的开头被中断。我目前没有要测试的环境,但我想到了两个选项。 1) 尝试转义域 "domain='\@google' 中的 @ 2) 使用数组构造函数 "WHERE email_domains @> ARRAY ['%s'];"
-
我尝试将@google.com 更改为不带@ 的anything.com,以查看我收到的错误消息。就是这个 ERROR:root:Failed to process Customer: "anything" LINE 1 或附近的语法错误:...FROM customers WHERE email_domains @> '{'anything.com'...
-
但是转义它给了这个 Failed to process Customer: syntax error at or near "\" LINE 1: ...FROM customers WHERE email_domains @> '{'\@anything.co..跨度>
标签: arrays python-3.x postgresql psycopg2