如何解决如何在不使用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的相同调用似乎有点可笑。
我尝试过使用executemany和execute_batch,但是在上述代码中却难以实现。如何在不使用for循环的情况下构造查询?我已经清理了输入内容,只是试图实现这一最后一步!
解决方法
例如:
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',('GER SC 3.5',('VEG OPK',8),('SUCCULENTS',18)]
因此,在您的情况下,将股票代号放入元组,然后将其用作参数(in %s
)的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。