Python查询数据库输出含Decimal标识该如何去除?
解决数据库查询输出含Decimal字样的问题
根本原因
你直接把查询返回的元组整体转字符串输出,元组序列化时会调用内部元素的__repr__方法,Decimal类型的repr结果就会带Decimal('xxx')标识。只要单独提取Decimal元素转普通字符串/数值类型再输出即可解决。
调整后的代码(推荐方案,Python侧处理)
你原来的代码还存在冗余的文件打开逻辑,会导致文件占用异常,一并修正:
cur.execute('SELECT tk_product_ord, SUM(tk_qty_ord) as qty_required ' 'FROM table1 WHERE tk_date = 15047 AND tk_prod_group = 11 ' 'GROUP BY tk_product_ord;') answer = cur.fetchall() # 删掉原来冗余的 file = open("test_data_output.txt") 和对应的close()代码 with open("test_data_output.txt", "w") as f: for prod_id, qty in answer: # 直接拼接两个元素,Decimal转str默认只会输出纯数值字符串 f.write(f"({prod_id}, {qty})\n")
如果需要转成整数/浮点数做后续计算,也可以把qty替换成int(qty)或者float(qty)。
可选方案:SQL层面处理
如果不想在Python代码里做转换,也可以直接修改SQL语句把聚合结果转成字符串类型,不同数据库语法略有差异,示例如下:
-- MySQL 写法 SELECT tk_product_ord, CAST(SUM(tk_qty_ord) AS CHAR) as qty_required FROM table1 WHERE tk_date = 15047 AND tk_prod_group = 11 GROUP BY tk_product_ord;
修改后返回的qty_required直接是字符串类型,无需额外转换即可正常输出。
内容的提问来源于stack exchange,提问作者haribo
相关产品推荐
相关产品推荐

