我想传递一个像[group1, group2, group3]这样的数组,然后过滤Postgres表列groups。创建或替换函数funname(groups text[])选择 * 从表名其中组列@〉组另外,请编写相同的函数,在定义character varying []时出现错误。
[group1, group2, group3]
groups
character varying []
tjvv9vkg1#
我不清楚您想要什么,但也许您正在寻找ANY运算符?
select * from some_unknown_table where group_column = any(array_parameter);
这要求group_column的数据类型与其中一个参数匹配。例如,如果group_column是text或varchar,则需要将参数声明为text[]。如果group_column是integer,则需要将参数声明为integer[]
group_column
text
varchar
text[]
integer
integer[]
cngwdvgl2#
您可以使用unnest函数转换'table'输出中的数组,然后筛选所需的值,例如:
unnest
SELECT * FROM ( SELECT unnest (ARRAY['group1','group2','group3']) AS arr ) AS sub WHERE arr ='group3'
ggazkfy83#
您可以对组数组使用join,对筛选器使用SELECT WHERE group IN groups:
import psycopg2 def filter_groups(group_names): try: # connect to BD connection = psycopg2.connect( host="host", user="user", password="pass", database="db_name" ) except Exception as _ex: print("[INFO] Connection error", _ex) try: with connection.cursor() as cursor: placeholders = ','.join(['%s'] * len(group_names)) rsql = f"SELECT * FROM table_name WHERE groups IN ({placeholders})" cursor.execute(rsql, group_names) rows = cursor.fetchall() cursor.close() except Exception as _ex: print("[INFO] Error while working with PostgreSQL", _ex) if connection: connection.close() print("[INFO] PostgreSQL connection closed.") return rows
3条答案
按热度按时间tjvv9vkg1#
我不清楚您想要什么,但也许您正在寻找ANY运算符?
这要求
group_column
的数据类型与其中一个参数匹配。例如,如果group_column
是text
或varchar
,则需要将参数声明为text[]
。如果group_column
是integer
,则需要将参数声明为integer[]
cngwdvgl2#
您可以使用
unnest
函数转换'table'输出中的数组,然后筛选所需的值,例如:ggazkfy83#
您可以对组数组使用join,对筛选器使用SELECT WHERE group IN groups: