我有这个查询,它工作得很好并且完全符合我的要求。根据用户输入提取公司的股票数据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。
添加回答
举报
0/150
提交
取消