【问题标题】:Fetching decimal data from Oracle using Sqlalchemy使用 Sqlalchemy 从 Oracle 获取十进制数据
【发布时间】:2019-09-26 23:36:21
【问题描述】:

使用sqlalchemy在oracle上执行SQL

QUERY = SELECT score as SCORE FROM USER1.TABLE1 WHERE id = 101 ORDER BY score DESC

output = []
results = db.engine.execute(QUERY)
[output.append(dict(row)) for row in results]

输出:

[{'score': Decimal('0.9556')},.....]

分数数据类型 - Number(16,14)

  1. 即使在大写别名后,我也得到小写输出。
  2. 我们可以删除输出中的Decimal 吗?

我尝试将分数转换为浮点数

 SELECT CAST(score as FLOAT) as SCORE FROM USER1.TABLE1 WHERE id = 101 ORDER BY score DESC

我得到类似的输出,

[{'score': 0.9191699999999999},.....]

【问题讨论】:

  • 试试score as "SCORE" from ..
  • @KaushikNayak 仍然很小
  • 好吧,我不熟悉sqlalchemy 是如何处理这些案件的。我一般使用 Cx_Oracle 来查询 Oracle 数据库。通常,Oracle 的 SQL 引擎默认将所有标识符转换为大写。确实不需要双引号。所以,你得到它是小写的,这意味着它与 sqlalchemy 的一些设置有关,它将它转换为小写。

标签: python oracle sqlalchemy


【解决方案1】:

通过添加代码块使用Counter 类可能是一个不错的选择

from collections import Counter
str=output[0]

c = Counter()
for k,v in str.items():
    c.update({k.upper(): '{0:f}'.format(v)})

print(c)  

到原始代码的以下部分。这样你得到的输出为

Counter({'SCORE': '0.9556'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2015-08-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多