我有一个 MySQL 服务器,它是不是由我开发的软件系统的一部分。因此,我不可能将该 MySQL 服务器升级到较新的版本,因为这可能会破坏软件系统与该数据库交互的能力。
我需要在面向公众的 Django 应用程序上读取该数据库。 django 版本是最新的 LTS (4.2)。
Django 的文档列出了 MySQL 的两个数据库 API 驱动程序选项:
这两个最新版本都不支持访问 MySQL 5.1 服务器
选项 1. 仍然适用于 Debian 11,但在子类中覆盖了一些方法,但不适用于 Debian 12。
当我将生产服务器从 Debian 11 升级到 12 时,如何确保我的 Django 应用程序仍然可以工作?
我尝试使用 MySQL Connector/Python 和选项
use_pure
,但它给了我错误 django.db.utils.DatabaseError: (1193, "1193 (HY000): Unknown system variable 'default_storage_engine'", 'HY000')
。
我不确定在子类化时必须修补什么,才能恢复与 MySQL 5.1 的兼容性。
我找到了适合我的特定用例的解决方案。它归结为子类化 django 的 mysql 数据库后端 (
django.db.backends.mysql
) 并在连接到旧版 MySQL 服务器时调整它传递给 mysqlclient
(MySQLdb.connect
) 的参数。