为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2023-09-26 14:33:40
我有这个查询,它工作得很好并且完全符合我的要求。根据用户输入提取公司的股票数据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 的相同调用似乎有点愚蠢。我尝试过使用 executemany和execute_batch,但很难将其实现到上面的代码中。如何在不使用 for 循环的情况下构建查询?我已经清理了我的输入,只是想实现最后一步!
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

举个例子:


import psycopg2

con = 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。


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信