如何从Django QuerySet中提取指定的symbols字段值?
解决QuerySet提取symbols字段的问题
原代码的问题
get_Memory = Memory.objects.filter(user=current_user).values()已经返回包含字典的QuerySet,后续cd = get_Memory.all()属于冗余操作——filter返回的结果本身就是可迭代的QuerySet。- QuerySet是对象集合(类似列表),不是单个字典,不能直接用
cd['symbols']这种方式取值,必须先定位到集合里的单个元素。
正确实现方式
情况1:确定当前用户只有一条匹配数据
直接用.first()获取QuerySet中的第一个(也是唯一的)字典对象,再提取symbols字段:
if cmd_exec == '/wanalysis': # 获取当前用户的Memory数据,返回包含字典的QuerySet memory_queryset = Memory.objects.filter(user=current_user).values() # 取第一条数据(如果确定只有一条) memory_data = memory_queryset.first() if memory_data: # 先判断是否存在数据,避免报错 X = memory_data['symbols'] print(X)
情况2:当前用户有多条匹配数据
需要遍历QuerySet,逐个提取symbols:
if cmd_exec == '/wanalysis': memory_queryset = Memory.objects.filter(user=current_user).values() # 遍历所有数据,收集symbols symbols_list = [item['symbols'] for item in memory_queryset] print(symbols_list) # 输出所有symbols组成的列表
额外处理:将字符串格式的列表转为真实列表
从你的输出看,symbols的值是字符串格式的列表("['AAPL', 'TSLA', 'MSFT']"),如果需要把它转成Python的列表对象,可以用ast.literal_eval():
import ast # 接上面的代码 if memory_data: symbols_str = memory_data['symbols'] X = ast.literal_eval(symbols_str) print(X) # 输出:['AAPL', 'TSLA', 'MSFT'],类型为list
内容的提问来源于stack exchange,提问作者Marc Kch
相关产品推荐
相关产品推荐

