如何在不使用 for 循环的情况下将简单的 psycopg2 SQL SELECT

我有这个查询,它工作得很好并且完全符合我的要求。根据用户输入提取公司的股票数据symbols:


stock_info = {}    

for stock in symbols:

        stock_info[stock] = get_dict_resultset("SELECT 

                                                date, close          

                                                FROM security_price 

                                                WHERE 

                                                security_price.id=%s;", [stock])

get_dict_resultset()连接到我的 postgreSQL 数据库,提取数据并将其存储到 python 字典中。这是定义:


def get_dict_resultset(query, param):

    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)

    cur.execute(query, param)

    ans =cur.fetchall()

    dict_result = []

    for row in ans:

        dict_result.append(dict(row))

    return dict_result

我不喜欢查询的是它嵌套的 for 循环。我想限制数据库和用户发生的事务量。考虑到 中的值数量symbols,当我只能使用一个简单的语句时,将其放在 for 循环中并迭代对 dB 的相同调用似乎有点愚蠢。

我尝试过使用 executemanyexecute_batch,但很难将其实现到上面的代码中。如何在不使用 for 循环的情况下构建查询?我已经清理了我的输入,只是想实现最后一步!



子衿沉夜
浏览 83回答 1
1回答

皈依舞

举个例子:import psycopg2con = psycopg2.connect("dbname='test' host='localhost' user=aklaver")cur = con.cursor()cp = (8, 18, 32)sql_str = "select * from cell_per where cell_per in %s"cur.execute(sql_str, [cp])rs = cur.fetchall()rs[('H PREM 3.5', 18), ('HERB 2.5', 32), ('H PREM 2.5', 32), ('GER SC 3.5', 18), ('VEG OPK', 8), ('SUCCULENTS', 18)]因此,在您的情况下,将股票代码放入一个元组中,然后将其用作参数()的参数in %s。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python