【发布时间】:2021-04-30 02:00:12
【问题描述】:
我一直在使用 SQLAlchemy 处理 MySQL 数据库的项目。我已经在我的 Windows 机器上完成了所有测试。当我将项目移动到 Ubuntu 服务器 20.04 时,问题就出现了。我收到以下错误:Python 'float64' cannot be converted to a MySQL type。做一些研究我发现this 类似的情况。建议只是使用int() 或float() 来显式转换数字。但是仍然存在一个问题:为什么它应该在 Windows 上运行而不是在 Linux 上运行?
做更多的研究我发现这可能是连接器的问题,这在 Windows 和 Linux 中是不一样的。实际上我之前遇到了一些问题,因为在 Windows 中我实例化了引擎:db_config = 'mysql://{}:{}@localhost/{}?charset=utf8mb4'.format(db_user, db_pass, db_schema),这是只指定方言而不是连接器。在 Linux 中,仅当我同时指定两者时才有效:db_config = 'mysql+mysqlconnector://{}:{}@localhost/{}?charset=utf8mb4'.format(db_user, db_pass, db_schema)
在 Windows 上,我将连接器 PyMySQL 与 Xampp 7.1.9 和 DB 10.1.26-MariaDB 与引擎 InnoDB 一起使用。在 Linux 上,我使用连接器 mysqlconnector 和服务器 MySQL 8.0.22-0ubuntu0.20.04.3 以及引擎 InnoDB。值得一提的是,我只有在 DB 上写入 float64 时才会遇到麻烦。
所以,经过这么长的介绍(对不起),具体问题是:
- 实际上是连接器的问题吗?还是我在这里遗漏了什么?
- 有没有办法在 Windows 中使用与在 Linux 中相同的代码? (可能只在 Linux 上添加方言和连接器)
- 我是否应该从现在开始对所有内容进行编程,每次将浮点数写入数据库时都指定转换
float()?
欢迎提供任何有关这些问题的线索。
【问题讨论】:
-
了解您在每个平台上使用的连接器和版本会有所帮助。数据库引擎也是如此。
-
@snakecharmerb 你完全正确。我编辑了。
标签: python mysql linux sqlalchemy mysql-connector