Python Django | 教程 | 5.修改后端数据库为MySQL
数据库部分
首先,准备好MySQL的数据库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
创建数据库: MariaDB [test]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | phpmyadmin | | test | +--------------------+ 5 rows in set (0.000 sec) MariaDB [test]> MariaDB [test]> create database django_db; Query OK, 1 row affected (0.001 sec) MariaDB [test]> MariaDB [test]> show databases; +--------------------+ | Database | +--------------------+ | django_db | | information_schema | | mysql | | performance_schema | | phpmyadmin | | test | +--------------------+ 6 rows in set (0.001 sec) MariaDB [test]> 创建用户: MariaDB [test]> grant all on django_db.* to django_admin@'%' identified by 'oracle'; Query OK, 0 rows affected (0.002 sec) MariaDB [test]> show grants for django_admin; +-------------------------------------------------------------------------------------------------------------+ | Grants for django_admin@% | +-------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `django_admin`@`%` IDENTIFIED BY PASSWORD '*2447D497B9A6A15F2776055CB2D1E9F86758182F' | | GRANT ALL PRIVILEGES ON `django_db`.* TO `django_admin`@`%` | +-------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.000 sec) MariaDB [test]> |
连接一下:

可以看到,连接成功,连接信息:
1 2 3 4 5 6 |
数据库:MariaDB 服务器:localhost / 127.0.0.1 端口:3306 库名:django_db 用户:django_admin 密码:oracle |
Django部分:修改
在一个Django的项目中,后端数据库的配置在项目的管理目录中,即与项目同名的那个子目录中:

需要修改的文件是上图中高亮的:settings.py文件。
配置文件修改:引入相关Python模块
查看配置文件的Python模块引用部分:

可以看到,当前只有一个pathlib的引入。
由于我们要连接的是MySQL数据库,所以这里应该再增加一个Python的MySQL模块的引入;
否则,在运行Django项目的时候,就有可能会遇到下面的错误:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
"C:\Program Files\JetBrains\PyCharm 2020.3.3\bin\runnerw64.exe" G:\PyCharm_data\django_datacenter\venv\Scripts\python.exe G:/PyCharm_data/django_datacenter/manage.py runserver 8000 Watching for file changes with StatReloader Exception in thread django-main-thread: Traceback (most recent call last): File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\backends\mysql\base.py", line 15, in <module> import MySQLdb as Database ModuleNotFoundError: No module named 'MySQLdb' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\adamhuan\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner self.run() File "C:\Users\adamhuan\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\core\management\commands\runserver.py", line 110, in inner_run autoreload.raise_last_exception() File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\utils\autoreload.py", line 87, in raise_last_exception raise _exception[1] File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\core\management\__init__.py", line 375, in execute autoreload.check_errors(django.setup)() File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\apps\registry.py", line 114, in populate app_config.import_models() File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\apps\config.py", line 301, in import_models self.models_module = import_module(models_module_name) File "C:\Users\adamhuan\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\contrib\auth\models.py", line 3, in <module> from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\contrib\auth\base_user.py", line 48, in <module> class AbstractBaseUser(models.Model): File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\models\base.py", line 122, in __new__ new_class.add_to_class('_meta', Options(meta, app_label)) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\models\base.py", line 326, in add_to_class value.contribute_to_class(cls, name) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\models\options.py", line 207, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\utils\connection.py", line 15, in __getattr__ return getattr(self._connections[self._alias], item) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\utils\connection.py", line 62, in __getitem__ conn = self.create_connection(alias) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\utils.py", line 204, in create_connection backend = load_backend(db['ENGINE']) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\utils.py", line 111, in load_backend return import_module('%s.base' % backend_name) File "C:\Users\adamhuan\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "G:\PyCharm_data\django_datacenter\venv\lib\site-packages\django\db\backends\mysql\base.py", line 20, in <module> ) from err django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient? |
Django项目:添加MySQL支持 – PyCharm 安装 PyMySQL模块
安装MySQL模块包:





Django项目:添加MySQL支持 – 添加引入包代码
添加import代码:

1 2 3 |
from pathlib import Path import pymysql pymysql.install_as_MySQLdb() |
配置文件修改:数据库连接信息
在该文件中,关注【DATABASES】部分:

修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { # SQLite3 # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # MySQL 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': '3306', 'NAME': 'django_db', 'USER': 'django_admin', 'PASSWORD': 'oracle', } } |
Django部分:运行
如果一切都没有问题,那么运行Django项目将没有报错:
