django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26).

环境:django 4.11 mysql 5.7 python 3.12.1

时间:20240429

说明:版本不兼容,最初使用注释源码,但是感觉这种处理很低端,所以有了这篇小作文

解决方法一:

1 找到文件:aca\Lib\site-packages\django\db\backends\base\base.py

注释第239行, 即:self.check_database_version_supported()

python 复制代码
def init_connection_state(self):
    """Initialize the database connection settings."""
    global RAN_DB_VERSION_CHECK
    if self.alias not in RAN_DB_VERSION_CHECK:
        # self.check_database_version_supported()
        RAN_DB_VERSION_CHECK.add(self.alias)

该方法验证是否为MySQL 8以上,否则执行raise,也就报错了

2 重载该方法

settings配置

python 复制代码
from django.db.backends.base.base import BaseDatabaseWrapper 


def check_database_version_supported(self):
    """
    在这里修改 check_database_version_supported 方法以适配 MySQL 5.7
    """
    if (
        self.features.minimum_database_version is not None
        and self.get_database_version() < self.features.minimum_database_version
    ):
        db_version = ".".join(map(str, self.get_database_version()))
        min_db_version = ".".join(map(str, self.features.minimum_database_version))
        print(f"WARNNING : The current MySQL version: {db_version}  The recommended MySQL version:{min_db_version}")

BaseDatabaseWrapper.check_database_version_supported = check_database_version_supported

settings文件在程序执行时加载,所以会替换Django下的源码,代替其执行

至此 结束

相关推荐
赵渝强老师8 分钟前
【赵渝强老师】崖山数据库的数据字典
数据库·oracle
quan263115 分钟前
20260529,日常开发-查老数据全量更新闭坑
java·mysql·主从·主从延迟
java_cj20 分钟前
MySQL 8.0 新特性深度解析:降序索引、Doublewrite Buffer 与 redo log 无锁优化
数据库·mysql
网管NO.126 分钟前
多表联查入门|INNER JOIN 内连接,关联查询基础(实操案例)
数据库·sql
devilnumber28 分钟前
MySQL 索引失效 20 例
数据库·mysql
念恒1230636 分钟前
MySQL事务(上)
数据库·mysql
devilnumber39 分钟前
MySQL 执行计划(EXPLAIN)背诵版
数据库·mysql
念恒1230642 分钟前
MySQL视图
数据库·mysql
骄马之死1 小时前
缓存与数据库一致性的核心方案
mysql·缓存
我叫张小白。1 小时前
基于Redis的缓存架构与一致性保障体系
数据库·redis·缓存·架构