有时在用cx_Oracle查询数据库时,会发现查询的数字丢失了精度,变得奇怪。这是因为Oracle里number使用十进制数字,而这并不能完全无缝转换为二进制数字的表现形式,如Python里处理小数默认的float类型。所以这时候就要做一个类型的转换,将查询的数字转换成decimal或者string类型都可以,以避免数字精度的丢失。

假设已经连上了数据库,游标是 cursor 。

把类型转换的方法写出来,如下:

然后将类型转换的方法传入到 cursor.outputtypehandler 中,执行查询,并将查询结果取出至dataframe中,如下:

这样所查询出来的数字结果就不会出现数字精度丢失的问题了。