避免在cursor.fetchall

时间:2017-04-26 22:28:50

标签: python json list psycopg2

在Python脚本中,cursor.fetchall命令返回一个元组列表,其中一些元素被标记为例如Decimal('0.50')而非0.50

myList= [(1, 'string1', None, None, 'string2', 0, 'string3'),
(1,   'string1',   Decimal('0.50'),   Decimal('2.5'),   'string2',   3,   'string3')]

我希望后一种形式(即0.50)的原因是我正在尝试使用print(json.dumps(result))发送列表,该列表当前返回TypeError: Decimal('0.50') is not JSON serializable

是否有直接的方式去除这种“类型”信息?我一直在努力解决这个问题而没有成功,我发现之前的相关问题仅涵盖所有元素属于同一类型的情况(例如here)。谢谢你的任何提示!

1 个答案:

答案 0 :(得分:0)

这是我克服这个问题的方法。

首先,我将查询结果转换为pandas数据帧:

df = pd.DataFrame(query_data)

然后,我只是将麻烦的列转换为字符串:

df[2] = [str(r) for r in df[2]]

最后,我将数据帧转换为csv字符串:

df_csv = df.to_csv(sep=',', index = False, header = False) 

这可以在print(json.dumps(result))中使用而没有错误。

非常具体的解决方法,但我认为无论如何都要发布它以提供至少一个问题的答案。