在 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)'
我已经引用了这个
基本上,我想在 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)'