如何使 sqlalchemy 在反映表时返回 float 而不是 Decimal?

2023-11-27

我有一个在 Python 代码之外定义的 MySQL 数据库。我使用反射将其放入 SQLAlchemy,因此我没有任何可以修改的类定义。我不必担心失去精度,并且我对 Python 中的结果进行了一些算术运算,因此我宁愿不必手动将一堆值转换为 float 或 Decimal。

import sqlalchemy as sa

eng = sa.create_engine("mysql+pymysql://user:passwd@server/database")
eng.execute("create table if not exists foo (x double not null)")
eng.execute("insert into foo (x) values (0.1)")

md = sa.MetaData(bind=eng)
md.reflect()
foo = md.tables["foo"]

res = eng.execute(foo.select())
row = res.fetchone()
print(type(row.x))
print(repr(foo.c.x.type))

Output:

<class 'decimal.Decimal'>
DOUBLE

使用来自的建议这个帖子,并且在我设置之前不使用反射表asdecimal属性,我可以获得浮点数而不是小数。

import sqlalchemy as sa

eng = sa.create_engine("mysql+pymysql://chiptest:fryisthedevil@database/bench_drylake")
eng.execute("create table if not exists foo (x double not null)")
eng.execute("insert into foo (x) values (0.1)")

md = sa.MetaData(bind=eng)
md.reflect()
foo = md.tables["foo"]

# this needs to happen before any queries
for table in md.tables.values():
    for column in table.columns.values():
        if isinstance(column.type, sa.Numeric):
            column.type.asdecimal = False

res = eng.execute(foo.select())
row = res.fetchone()
print(type(row.x))
print(repr(foo.c.x.type))

Output:

<class 'float'>
DOUBLE(asdecimal=False)

注意:如果在设置之前对反射表进行查询asdecimal = False, column.type仍然显示为DOUBLE(asdecimal=False),但值的类型仍然是Decimal。我猜这是因为 SQLAlchemy 正在进行某种缓存,但我现在不会确定这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 sqlalchemy 在反映表时返回 float 而不是 Decimal? 的相关文章

随机推荐

  • 在 Container-VM 映像上使用 root 用户登录 docker

    这是关于 Google Container VM Image beta 的问题https cloud google com compute docs containers vm image 我登录了一个由Container VM镜像制作的实
  • 输入大小固定的算法复杂度

    我找到了一些关于大 O 表示法的参考资料 但据我所知 算法复杂性是输入数据大小的函数 例如 如果冒泡排序的复杂度为O n 2 n是输入数组的大小 正确的 但是 如何确定具有固定输入大小并取决于输入值的算法的复杂性 例如 求最大公约数 GCD
  • bookdown:自定义输出文件名

    这是我之前在这里提出的问题的后续 为 bookdown 项目创建随附幻灯片 Bookdown允许将文件编译为各种格式 包括多个pdf 因此 问题是给输出赋予不同的名称 如果没有 则第二个pdf编译覆盖第一个 在对我之前问题的评论中 我写道
  • Wakanda 服务器脚本化干净关闭

    通过 OS X shell 脚本执行 Wakanda 服务器彻底关闭的最佳实践是什么 这将是当前加载和运行的解决方案 即将发布的 1 1 0 版本的最佳实践 处理applicationWillStop事件在service处理应用程序特定的关
  • .NET:如何在不打开文件的情况下打印文件

    我们有一个主要用于归档文件的应用程序 并且我们为用户提供了打印这些文件的可能性 它们可以是 txt doc pdf jpg 没什么花哨的 有没有一种 NET 方法可以将这些文件发送到打印机而不需要进一步处理它们 即打开它们 我已经尝试使用
  • 带 SFTP 的 Paramiko SSH 客户端

    如何进行 SFTP 传输SSHClient在远程服务器上 我有一个本地主机和两个远程主机 远程主机是备份服务器和Web服务器 我需要在备份服务器上找到必要的备份文件 并通过 SFTP 将其放在 Web 服务器上 如何使 Paramiko 的
  • 如何在 Flutter 中获取、设置、更新和删除 Cloud Firestore 中的数据?

    我尝试了一些代码 但出现异常 我得到的异常 java lang IllegalArgumentException Invalid document reference Document references must have an eve
  • 如何避免 HTML5 Canvas 中的多边形边缘缝合伪影?

    我为 OpenHeatMap 开源项目维护并行 Flash 和 HTML5 Canvas 渲染器 我受到两个版本之间带有分数坐标的填充多边形渲染不一致的困扰 如果渲染共享一条边的两个多边形 Canvas 将沿该边显示可见的连接 而 Flas
  • ViewExpiredException:找不到已保存的视图状态:在 JSF 中提交表单时

    我在尝试提交表单时遇到以下异常 javax faces application ViewExpiredException page1 xhtml No saved view state could be found for the view
  • 在Ubuntu上的QT5中将透明的QWidget放在QMediaView之上

    Goal 我希望基于 QT5 的 GUI 的背景是正在播放的视频文件 我还希望能够以透明度设置 GUI 组件的样式 以便视频能够透过它们显示 我不确定这是否有可能实现 可能是我刚刚错过了一个重要的线索 我毕竟是 Qt 初学者 也可能是它根本
  • Node.js读取USB端口信号

    我已经安装了串行端口使用 npm 的 Node js 模块 npm install serialport 现在我想通过计算机的 USB 端口从 Android 手机向节点应用程序发送一些消息 假设节点可以读取串行端口信号 以前有人这样做过吗
  • 如何在WinDbg中设置符号?

    我在用Windows 调试工具启动 WinDbg cdb 或 ntsd 时收到以下错误消息 Symbol search path is Invalid Symbol loading may be unreliable without a s
  • 使用 Google Apps 脚本获取工作表单元格注释值

    有没有办法获取单元格注释的值并将其显示在旁边的单元格中 我有一个 C 列 其中一些单元格包含注释 我想获取这些注释值并将每个单元格注释写入 D 列中其旁边的单元格中 例如 如果单元格 C4 有注释 无条目 我想在 D4 中显示 无条目 我今
  • PostgreSQL 转义 JSON 字符串

    我正在尝试使用 PostgreSQL 9 3 中的新 JSON 功能 并且正在寻找一个未转义 JSON 的函数 与 to json anyelement 相反 下面是一个 JSON 示例 single comment Fred said H
  • R 统计:简单列向量的问题

    我在使用从制表符分隔的数据文件导入的数据时遇到问题read delim 大多数列都包含我需要执行的数字数据t test为了 不幸的是我总是收到这个错误 Error in if stderr lt 10 Machine double eps
  • 通过readinto()将二进制数据解析为ctypes结构对象

    我正在尝试处理二进制格式 按照此处的示例 http dabeaz blogspot jp 2009 08 python binary io handling html gt gt gt from ctypes import gt gt gt
  • 在关闭警告中访问 foreach 变量

    我收到以下警告 访问闭包中的 foreach 变量 使用不同版本的编译器编译时可能有不同的行为 这就是我的编辑器中的样子 我知道如何解决此警告 但我想知道为什么会收到此警告 这是关于 CLR 版本吗 与 IL 有关吗 此警告有两个部分 第一
  • 在 Quartz.Net 中调度相关作业

    我需要一些帮助 我正在尝试弄清楚如何在 Quartz Net 中安排工作 Quartz 中的作业对应于我的 Web 应用程序中的任务 它们都是我的 Web 应用程序中作业的一部分 我希望用户能够按需启动作业 Web应用程序上下文 并使其立即
  • 为什么我在执行 sql 脚本时收到“不一致的结束行”警告窗口?

    当我尝试执行 sql 脚本时 它会出现一个警告窗口 以下文件中的行结尾不一致 是否要 使其正常化 我只是想知道为什么会出现此问题以及如何永久修复它 请帮忙 因为有些行以 CR LF 对结尾 有些行仅以 CR 或 LF 结尾 基本上以某种方式
  • 如何使 sqlalchemy 在反映表时返回 float 而不是 Decimal?

    我有一个在 Python 代码之外定义的 MySQL 数据库 我使用反射将其放入 SQLAlchemy 因此我没有任何可以修改的类定义 我不必担心失去精度 并且我对 Python 中的结果进行了一些算术运算 因此我宁愿不必手动将一堆值转换为