【发布时间】:2019-05-22 16:54:21
【问题描述】:
我有 3 个用户 ID 和时间范围列表(每个用户 ID 不同),我想为其提取数据。我正在通过 Python 查询 AWS redshift 数据库。通常,只有一个列表,我会做这样的事情:
sql_query = "select userid from some_table where userid in {}".format(list_of_users)
其中的用户列表是我想要的用户 ID 列表 - 比如说 (1,2,3...)
这很好用,但现在我需要以某种方式将它传递给(用户 ID、时间下限、时间上限)的三元组。例如 ((1,'2018-01-01','2018-01-14'),(2,'2018-12-23','2018-12-25'),...
我尝试了这个基本查询的各种版本
sql_query = "select userid from some_table where userid in {} and date between {} and {}".format(list_of_users, list_of_dates_lower_bound, list_of_dates_upper_bound)
但无论我如何在 format() 中构造列表,它都不起作用。我不确定这种方式是否可行,或者我是否应该遍历我的列表并为每个三元组重复调用查询?
【问题讨论】:
-
between甚至可以处理 sql 中的列表吗? -
使用什么包连接到redshift?如果
psycopg2查看此 QA stackoverflow.com/questions/8671702/…,它详细说明了如何填充 SQLIN表达式。但是,您应该注意所需的类型是元组,而不是列表。但是,正如其他人在 cmets 中指出的那样,将多个元素传递到BETWEEN表达式的任一侧(作为列表、元组或其他方式)是荒谬的。考虑执行多个SELECT语句,可能由某种UNION连接。
标签: python sql amazon-redshift