如何使用python在SQL查询中使用Pandas列表作为变量?

8nuwlpux  于 2022-12-02  发布在  Python
关注(0)|答案(2)|浏览(155)

我在Python上使用Pandas库,我想知道是否有一种方法可以在SQL查询中使用列表变量(或者series更好?),比如uID_list,它也可以在相同的Python代码中执行。例如:

dict = {'a': 1, 'b': 2, 'c':3}
uID_series = pd.Series(data=dict, index=['a','b','c'])
uID_list = uID_series.toList()

假设这个uID_list可以在以后更改,因此它并不总是由1, 2, 3组成。
如何在下面的SQL查询中“插入”这个uID_list变量?

sql = 
f'''
CREATE PROCEDURE SearchForUsers(@uIDinput AS INT(11))
AS
BEGIN

    SELECT username
    FROM users_table
    WHERE uID in @uIDinput

END

EXECUTE SearchForUsers {uID_list}
'''

请注意,在数据库中创建一个新表对我来说不是一个选择,因为它与工作有关,我的主管对保持数据库干净非常严格。
我实际上想做的是在users_table表中看到一个username的选择,其中users_table中的uID与存储的uID的变化集合相匹配,该集合由uID_list给出。uID_list依赖于python代码的其余部分,在那里它可以被改变和操纵。

blmhpbnm

blmhpbnm1#

您只是想提取数据吗?在存储过程之外会更容易

l1 = ['ad', 'dfgdf', 'htbgf', 'dtghyt']

l1_str = "('" + "', '".join([str(item) for item in l1]) + "')"

sql = 
f'''
    SELECT username
    FROM users_table
    WHERE uID in {l1_str}
'''
eagi6jfj

eagi6jfj2#

您可以首先将列表转换为元组,然后将其作为pandas.read_sql_query的参数传递。
假设cnx是连接的名称,请尝试以下操作:

uID_tuple = tuple(uID_list)

sql = 
'''
CREATE PROCEDURE SearchForUsers(@uIDinput AS INT(11))
AS
BEGIN

    SELECT username
    FROM users_table
    WHERE uID in @uIDinput

END

EXECUTE SearchForUsers ?
'''

pd.read_sql_query(sql, cnx, params=[uID_tuple])

相关问题