前言:
先大体说明执行数据迁移文件时候的相关环境,其中记得有一次安装搜索库时候造成django版本升级过,然后我又降级到了1.8.2,突然调试时候发现迁移mysql文件时候竟然报错,回顾了下是老问题,所以记录下;
环境版本:python3.7
django版本:1.8.2
具体报错信息:
Traceback (most recent call last):
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 24, in <module>
import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/core/management/__init__.py", line 312, in execute
django.setup()
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/Users/dongchao/.virtualenvs/py_django/lib/python3.7/importlib/__init__.py", line 127, in import_module
......
报错分析:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb' 非常明显没有MySQLdb吗?
记得我第一次时候是飞快的在虚拟环境输入了pip install MySQLdb,然后大家都猜到了又报错了;
ERROR: Could not find a version that satisfies the requirement MySQLdb (from versions: none)
ERROR: No matching distribution found for MySQLdb
冷静的思考了下重新从头开始分析:
最开始的报错信息原因是啥?就是因为django默认使用的是sqlite类型数据库,我在setting中配置了mysql数据库造成执行model迁移数据库文件时候报没有mysql驱动造成的;
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE':'django.db.backends.mysql',
'NAME':'bj18',
'USER':'root',
'PASSWORD':'......',
'HOST':'..........',
'PORT':3306,
}
}
然后回想了下对于mysql的支持python2和python3提供的模块不一样,这个MySQLdb应该是python2的,那3的呢?3升级后应该是PyMySQL;
到这里很清晰了,但是还有问题:1、PyMySQL我已经安装了,但是还是没迁移成功——>2、关键问题,安装后在python3对应django中如何让人家认可呢?——>3、首先想到的是修改源码,但是感觉这样做不妥,随便修改框架源码违背设计原则呀;
解决方案:
最终解决方案在项目的__init__.py包文件中导入提供即可:
import pymysql
pymysql.install_as_MySQLdb()
![2930d239125cbc631d660b10b5adddb1.png](https://i-blog.csdnimg.cn/blog_migrate/37d87154fbf4177bf396e85d26d64a8e.jpeg)
再次执行迁移文件就成功了,然后执行迁移文件成功建立数据表;