Cx_Oracle(Python3.6)SQL查询组导致ValueError-在SQL Developer中运行良好

Cx_Oracle(Python3.6)SQL查询组导致ValueError-在SQL Developer中运行良好,python,sql,oracle,oracle-sqldeveloper,cx-oracle,Python,Sql,Oracle,Oracle Sqldeveloper,Cx Oracle,系统信息: print(cx_Oracle.clientversion()) (12, 2, 0, 1, 0) print(cx_Oracle.version) 6.0b2 print(sys.version) 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] 我正在运行一个查询,它在SQL Developer中正常工作,但是在使用cx\U Orac

系统信息:

print(cx_Oracle.clientversion())    
(12, 2, 0, 1, 0)
print(cx_Oracle.version) 
6.0b2
print(sys.version)
3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]
我正在运行一个查询,它在SQL Developer中正常工作,但是在使用cx\U Oracle的python中运行时会出现错误。它似乎与GROUP BY子句有某种关联,因为当删除
SUM
GROUP BY
时,查询在cx_Oracle中运行

SQL命令:

SQL Developer中的返回:

+-------------+------------+-------------------------+
| "PROP_CODE" | "FORECAST" |     "REMAINING_FC"      |
+-------------+------------+-------------------------+
| MYPROP      |         17 | 3858.2210740962656178   |
| MYPROP      |          8 | 4599.4697955023602118   |
| MYPROP      |          4 | 798.79072149551767364   |
| MYPROP      |          7 | 1096.30162478218624302  |
| MYPROP      |         18 | 4016.37933889910515332  |
| MYPROP      |          1 | 4793.6514493804123866   |
| MYPROP      |          2 | 10070.756632866636683   |
| MYPROP      |          3 | 29910.550761344399349   |
| MYPROP      |          5 | 1820.4588262721241473   |
| MYPROP      |          6 | 15406.887917698571224   |
| MYPROP      |         99 | 3846.232477937824844934 |
+-------------+------------+-------------------------+
python中的SQL查询:

forecast_query = '''SELECT prop_code, forecast, \
sum(uc_fc) as remaining_fc \
FROM OY_UNC_STYDT_FCST_UPD_ARCH \
WHERE prop_code = 'MYPROP' \
AND stay_Date = '01-MAY-17' \
GROUP BY prop_code, forecast'''
和运行它的代码:

start = time.time()
my_dsn = cx_Oracle.makedsn(host='myhost', port=1560, sid='mysid')
con = cx_Oracle.Connection(user= 'username', password='pass', dsn = my_dsn)
cur = con.cursor()
cur.execute(forecast_query)
forecast_results = cur.fetchall()
con.close()
返回此错误:

ValueError: invalid literal for int() with base 10: '3858.2210740962656178'

谢谢你的帮助

我可以通过将
CAST
强制为
float
参数添加到我想要求和的列来运行它。我不确定为什么cx\U Oracle无法处理该查询,否则。可能是虫子

有效的SQL查询:

forecast_query = '''SELECT prop_code, demand_forecast_segment_id, \
cast(sum(uc_fc) as float) as remaining_fc \
FROM MY_TABLE\
WHERE prop_code = 'MYPROP' \
AND stay_Date = '01-MAY-17' \
GROUP BY prop_code, forecast'''

这是由于模块中存在已修复的错误造成的。请参阅此问题:。

问题似乎与此处所述相同:您能否尝试使用
对字符(sum(uc_fc))
?找到了!这完全是同一个问题。
to_char
确实有效。同样使用
cast
作为
float
也可以工作,但会降低一些精度。我猜这是因为浮点太多了,python无法处理。很高兴它帮了忙!:-)
forecast_query = '''SELECT prop_code, demand_forecast_segment_id, \
cast(sum(uc_fc) as float) as remaining_fc \
FROM MY_TABLE\
WHERE prop_code = 'MYPROP' \
AND stay_Date = '01-MAY-17' \
GROUP BY prop_code, forecast'''