flask mysql SUM() 来自 cursor.fetchone() 的字典中的小数

flask mysql SUM() Decimal in Dictionary from cursor.fetchone()

我正在将我的烧瓶应用程序连接到一个 MySQL- 数据库,如下所示:


from flask_mysql_connector import MySQL
from flask_mysqldb import MySQL


# MySQL Connection
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = ''
app.config['MYSQL_DB'] = 'Prices'
app.config['MYSQL_PORT'] = 3306
app.config['MYSQL_DATABASE_SOCKET'] = ''
app.config['MYSQL_UNIX_SOCKET'] = ''
app.config['MYSQL_CONNECT_TIMEOUT'] = ''
app.config['MYSQL_READ_DEFAULT_FILE'] = ''
app.config['MYSQL_USE_UNICODE'] = ''
app.config['MYSQL_CHARSET'] = ''
app.config['MYSQL_SQL_MODE'] = ''
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'


mysql = MySQL()
mysql.init_app(app)

执行这样的查询:

cursor.execute("SELECT SUM(total) AS sumy FROM tbl")
total = cursor.fetchone()
total = total["sumy"]

return是这个:

({'sumy': Decimal('123.4')})

我现在的问题是:

是否每个连接器,

MySQL Connector/Python
PyMySQL
MySQLDB
mysqlclient
and the OurSQL

return 来自 SUM(列)查询的 Decimal('123.4') 值? 我将如何以简单的方式摆脱这个 Decimal-feature?我知道那里有 CAST() 和 float() 建议。 我喜欢保持简单,所以我可能缺少 fetchone() 参数吗? 或者像 ['raw'] 这样的连接参数,因为 MySQL Connector/Python 有(我必须重写我的代码,如果我不得不改变那个......)

谢谢。

小数是 python 表示固定十进制值的方式。 SQL 返回小数可能是因为 sumy 是小数。很可能所有的实现都会以同样的方式处理这个问题。

让 python 应用程序将其作为 Decimal 处理可能是维护负责检索的数据库和表示的应用程序的最佳方式。

好吧,尽管看起来很有趣,但即使是浮点数的 SUM 也返回为 Decimal(123.4)。我继续在 MySQL 中进行所有计算,并仅使用 flask 来显示内容。