【问题标题】:Python MySQL select JSON value as actual data typePython MySQL选择JSON值作为实际数据类型
【发布时间】:2020-12-29 02:51:41
【问题描述】:

我在 Python 中使用 MySQL 连接器来存储和获取一些 JSON 数据。我在将存储的 JSON 值作为实际的 Python 数据类型时遇到问题。希望有人能指出我正确的方向。

假设我有下表,TestTable;

id   data
1    {"val": 100.5}
2    {"val": true}

我有以下 SQL 查询:

SELECT id, data->"$.val" FROM TestTable;
  1. 当我在 mysql 客户端的终端中运行查询时,结果看起来不错
  2. 当我在 Python 脚本中运行查询时,“val”的结果是浮点值(即“100.5”)的字符串类型和布尔值(即真)的布尔类型

这是 Python 代码

cmd = "SELECT id, data->"$.val" FROM TestTable;"
mysql_cur.execute(cmd)
res = mysql_cur.fetchall()
mysql_cur.close()
# res has id and val. id is of type int, val is of type string for float value and type bool for boolean value

如何将结果转换为 Python 的数据类型,即。浮点数和布尔值?

谢谢,

【问题讨论】:

  • 你不能。在结果中,该列中的所有值必须具有相同的数据类型。
  • @GMB 即使所有的“val”都是float值,结果集仍然有val作为字符串。
  • 然后检查内容并进行转换
  • @nbk 这就是我现在正在做的事情。我希望有一种更好的方法来做到这一点,例如我在 mysql 连接器中不知道的设置,可以像转换布尔值一样自动转换它们。

标签: mysql


【解决方案1】:

Json 基本上是一个字符串,所以结果也总是字符串。

这就是您收到的内容,没有人可以自动转换它,因为只有您自己决定字节的含义。

将数据正确保存在行和列中,而不是 json 或任何其他分隔字符串

【讨论】:

  • 实际上,布尔类型在结果集中是自动转换的,所以 MySQL 连接器已经有办法处理它。当我执行JSON_TYPE(data->"$.val") 时,它会显示实际的预期类型(即“DOUBLE”和“BOOLEAN”)。我只是不确定为什么双精度值没有像布尔值那样自动转换。
  • 正如 GMb 已经说过的,你不能 ,ix 类型。所以在你的代码中保留你的 cobnversion
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2021-02-25
  • 2015-01-07
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多