在 postgresql 查询中使用多个 pandas 列表来过滤数据

Use multiple pandas list in postgresql query to filter data

我已经引用了这个 并尝试将其扩展为适用于多个列表

基本上,我想在 postgresql 查询中使用多个 pandas 列表(在 Jupyter notebook 中编写)

subj_list = [1,2,3,4]
class_list = [4,5,6,7,8,9,10,11,12,13]

我想在下面的查询中列出我的两个列表。我尝试了以下

sql = "select * from tablea where subject_id in ({}) and class_id in ({})"
sub_ids = ', '.join(['%s'] * len(subj_list))
class_ids = ', '.join(['%s'] * len(class_list))
sql = sql.format(sub_ids ,class_ids )
cur.execute(sql,subj_list,class_list)

我收到如下所示的错误

TypeError Traceback (most recent call last) in ----> 1 cur.execute(sql,subj_list,class_list)

TypeError: function takes at most 2 arguments (3 given)

我尝试为多个列表扩展 ,但它似乎不起作用。

可能是我使用不当。可以帮我解决这个问题吗?

这里的专家可以帮助我解决如何在查询中直接使用多个 python 列表变量吗?

如果你使用元组而不是列表,你可以很容易地做到这一点:

subj_list = (1,2,3,4)
class_list = (4,5,6,7,8,9,10,11,12,13)

sql = "select * from tablea where subject_id in {} and class_id in {}"
cur.execute(sql,subj_list,class_list)

cursor.execute 期望它的第二个参数是一个序列,每个值占位符一个元素。为满足此要求,通过将两个列表加在一起(或用第二个扩展第一个)来创建一个新列表。

all_values = subj_list + class_list
print(cur.mogrify(sql, all_values))

给予

b'select * from tablea where subject_id in (1, 2, 3, 4) and class_id in (4, 5, 6, 7, 8, 9, 10, 11, 12, 13)'