SQLite3如何将SQL查询返回的数据赋值给变量?
解决SQLite查询结果赋值给变量的问题
你当前的问题是fetchall()返回的是包含元组的列表(比如[(0.3786567, 'EXMO')]),而你直接用未定义的last_price和exchange变量赋值,自然取不到正确数据。以下是具体的解决方法:
方法1:用fetchone()直接获取单行结果
因为你的查询用了MAX(last),结果只会有一行,用fetchone()比fetchall()更合适,它直接返回单个元组(而非列表):
connect_SQL.execute(""" SELECT MAX(last), exchange from MY_TABLE WHERE base="XRP" and target="EUR" """) sell_row = connect_SQL.fetchone() # 返回结果:(0.3786567, 'EXMO')
方法2:拆分元组赋值给变量
拿到元组后,可以直接解包赋值给两个变量:
# 确保查询有结果的情况下直接解包 if sell_row: Sell_price, Sell_exchange = sell_row else: # 处理查询不到数据的情况(可选) Sell_price = 0.0 Sell_exchange = "无数据" # 现在打印就能得到正确结果 print("A: ", Sell_price, " B: ", Sell_exchange)
如果你坚持用fetchall()
如果一定要保留fetchall(),需要先从列表中取出第一个元组,再拆分:
Sell_on = connect_SQL.fetchall() if Sell_on: # 检查列表不为空 Sell_price, Sell_exchange = Sell_on[0] # 取列表的第一个元素(元组)
注意点
- 不要直接使用
last_price或exchange这类未定义的变量,必须从查询返回的结果中提取数据。 - 建议加上空结果判断,避免查询不到数据时引发
IndexError或TypeError。
内容的提问来源于stack exchange,提问作者Terminator2012b
相关产品推荐
相关产品推荐

