Django从PostgreSQL数据库获取Decimal数据显示及zip操作异常问题
问题原因与解决方法
1. 列表显示带Decimal()标识的问题
单独打印Decimal类型对象时,Python会调用其__str__()方法输出纯数值格式;打印列表时,列表会调用内部元素的__repr__()方法,因此会显示Decimal('xxx')的格式,这属于Python的默认显示规则,数据本身没有异常。如果需要列表存储普通数值,直接将Decimal转为float或者字符串类型即可。
2. zip调用报错的常见原因
- 缩进错误:你提供的代码中
print("poi_lat:" , poi_lat)行缩进异常,可能导致循环逻辑混乱,最终poi_lat和poi_log两个列表长度不一致,后续使用zip结果时出错。 - 查询无结果报错:原代码循环查询单个id,如果对应id不存在,
poi_name[0]会直接抛出索引错误,循环中断导致两个列表长度不一致。 - 误将zip迭代器当报错:Python3中
zip()返回的是迭代器对象,直接打印只会显示<zip object at 内存地址>,这不是报错,转成list即可查看内部数据。
优化后代码
poi_lat = [] poi_log = [] # 一次性查询所有符合条件的经纬度,避免循环查询数据库降低性能 poi_list = end_poi.filter(id__in=IDs).values_list('lat', 'log') for lat, log in poi_list: # 转float解决Decimal显示问题,字段为空时做默认值处理避免报错 poi_lat.append(float(lat) if lat is not None else 0.0) poi_log.append(float(log) if log is not None else 0.0) print("poi_lat:", poi_lat) # 转list获取zip后的实际数据 coordinates = list(zip(poi_lat, poi_log))
内容的提问来源于stack exchange,提问作者user16529463
相关产品推荐
相关产品推荐

