首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL Decimal类型将pymysql查询结果转换为Python

使用MySQL Decimal类型将pymysql查询结果转换为Python
EN

Stack Overflow用户
提问于 2020-01-23 05:12:16
回答 1查看 709关注 0票数 2

我对Python (3.x)比较陌生,该语言的一个令人困惑的行为是,Decimal和float似乎是不同的类型(我在这里假设,这种区别是双重/浮点之间的通常区别……)。

更复杂的是,我的Python逻辑用定义为Decimal (多种格式)的字段对MySQL记录进行读写。

在写作方面,我把pymysql编码器搞成这样:

代码语言:javascript
复制
import numpy as np
import pymysql

pymysql.converters.encoders[np.float64] = pymysql.converters.escape_float
pymysql.converters.conversions = pymysql.converters.encoders.copy()
pymysql.converters.conversions.update(pymysql.converters.decoders)

我相信,这有助于MySQL记录中的Python小数的持续存在。

但是在读取方面,当我们通过pymysql查询读取Decimal字段时,似乎没有明显的方法获得Python。(这可能意味着数据的下降,因此可能导致数据的丢失。)

这里的人是做什么的?该约定是否只是为了在任何地方使用十进制类型来规避这些向下/向上转换的问题?那么通过pymysql的MySQL接口呢?

我的一般想法是,浮动/双倍行为应该是自动的。语言对float/double进行区分可能是件好事;但是,代码完全崩溃了,因为简单的+-操作数不能很好地处理各种类型,这确实让人困惑。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-10-19 02:07:08

可能对OP没有任何帮助,但这可能会对发现自己处于类似情况的其他人有所帮助。您可以使用默认的解码器(默认情况下是十进制)。

代码语言:javascript
复制
import pymysql

query = """
    select * from db.table
"""

connection_string = {"host":"localhost","port":"3306","user":"user","password":"***","database":"db"}

conversions = pymysql.converters.conversions
conversions[pymysql.FIELD_TYPE.DECIMAL] = lambda x: float(x)
conversions[pymysql.FIELD_TYPE.NEWDECIMAL] = lambda x: float(x)
conn = pymysql.connect(
                host=connection_string.get("host"),
                user=connection_string.get("user"),
                password=connection_string.get("password"),
                db=connection_string.get("database"),
                charset="utf8",
                conv=conversions,
                cursorclass=pymysql.cursors.DictCursor,
                autocommit=True
            )

cursor = conn.cursor()

cursor.execute(query)

results = cursor.fetchall()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59871904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档