环境: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()
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配置
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下的源码,代替其执行
至此 结束