我有一个Plone Web应用程序,它使用psycopg2
(目前为2.5.5)访问Postgres数据库(9.1或9.3,具体取决于计算机)。
我有应用程序端组,由组ID(例如group_a
,group_b
)和一个视图在一个字段中生成一组组ID(例如group_ids
= {group_b,group_c}
。用户可以是多个组的成员。我想选择用户组(Python:('group_a', 'group_b')
)和视图组的交集处的所有行(SQL:{group_b,group_c}
)不为空。
我的第一次尝试是将用户组扔到psycopg2:
db.query('SELECT * FROM view_name WHERE group_ids = ANY(%(group_ids)s);',
None,
{'group_ids': ('group_a', 'group_b')})
但是这不起作用(抱歉,德语错误消息;即使在psql
shell LANG=C
中我也没有获得英文文本):
FEHLER: konnte Arraytyp für Datentyp character varying[] nicht finden
...这意味着,Postgres对character varying[]
数组中的group_ids
值感到困惑。那我该怎么办?
谢谢!
答案 0 :(得分:2)
尝试使用重叠&&
operator代替 df1 <- structure(list(Date = c("10/1/2013", "", "", "", "", "",
"10/2/2013",
"", "", "", ""), Id = c(3444L, 87873L, 1243L, 35473L, 7363L,
8335L, 4783L, 3355L, 4544L, 94453L, 33554L)), .Names = c("Date",
"Id"), class = "data.frame", row.names = c(NA, -11L))
:
= ANY()
如果我正确地阅读psycopg2
documentation,我认为您也应该传递SELECT * FROM view_name WHERE group_ids && '{group_a,group_b}';
而不是list
:
tuple