1.MySQL与SQLite对比

MySQL SQLite
特点 为服务器端设计 轻量级可嵌入
高并发访问 支持 不支持
占用内存 比SQLite大
实用性 服务器 适合桌面和移动应用

2. 安装与配置 ck hhxxttxs

管理员身份启动cmd,进入Mysql安装目录的bin下

  1. net start MySQL 启动服务
  2. mysql -h localhost -u root -p 登录
  3. Enter password: *
  4. Welcome to the MySQL monitor. Commands end with ; or \g.
  5. Your MySQL connection id is 10
  6. Server version: 8.0.20 MySQL Community Server - GPL
  7. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  8. Oracle is a registered trademark of Oracle Corporation and/or its
  9. affiliates. Other names may be trademarks of their respective
  10. owners.
  11. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  12. mysql> create database s2ac_db default charset=utf8mb4 default collate utf8mb4_unicode_ci;
  13. Query OK, 1 row affected (0.67 sec)
  14. mysql> show databases;
  15. +--------------------+
  16. | Database |
  17. +--------------------+
  18. | firstdb |
  19. | information_schema |
  20. | mysql |
  21. | performance_schema |
  22. | s2ac_db |
  23. | studb |
  24. | sys |
  25. +--------------------+
  26. 7 rows in set (0.00 sec)
  27. mysql> quit
  28. Bye

3.配置Django

1 .新建项目数据库 s2ac_db

mysql> create database s2ac_db default charset=utf8mb4 default collate utf8mb4_unicode_ci;
Query OK, 1 row affected (0.67 sec)

分配新用户(不要使用root用户管理)

mysql> create user 'ck'@'localhost' identified by 'hhxxttxs';    新建用户ck
Query OK, 0 rows affected (0.60 sec)

mysql> grant all privileges on s2ac_db.* to 'ck'@'localhost';    赋予管理权限
Query OK, 0 rows affected (0.58 sec)

mysql> flush privileges;                                        # 刷新权限
Query OK, 0 rows affected (0.13 sec)

mysql> show grants for 'ck'@'localhost';        # 查看权限
+-----------------------------------------------------------+
| Grants for ck@localhost                                   |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `ck`@`localhost`                    |
| GRANT ALL PRIVILEGES ON `s2ac_db`.* TO `ck`@`localhost`   |
+-----------------------------------------------------------+
3 rows in set (0.01 sec)

重新登录查看是否正确设置

D:\MyDatabase\mysql\mysql-8.0.20-winx64\bin>mysql -h localhost -u ck -p
Enter password: ********
...

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| s2ac_db            |
+--------------------+
2 rows in set (0.00 sec)

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',    # 数据库类型
        'NAME': 's2ac_db',                        # 数据库名
        'USER': 'ck',                            # 管理员账户
        'PASSWORD': 'hhxxttxs',                    # 管理员密码
        'HOST': 'localhost',                    # 后台地址 
        'PORT': '3306',                            # mysql端口号,在my.ini文件中自定义
    }
}

2. conda install mysqlclient

3. python manage.py makemigrations/migrate

4. 启动服务器发现错误(启动服务器前需要开启mysql服务 net start mysql)

ProgrammingError at /(1146, “Table ‘s2ac_db.my_cache_table’ doesn’t exist”)

缓存表错误,解决方法:

python manage.py createcachetable

5. 添加mysql bin文件夹路径到系统变量

4. 迁移数据

SQLite —> MySQL

1. 使用Django导出导入数据完成迁移

首先更改settings数据库为sqlite3.然后

python manage.py dumpdata > data.json

执行下个命令:

python manage.py loaddata data.json

报错:

django.db.utils.IntegrityError: Problem installing fixture 'G:\code_workspace\py3_2020\7_Django_2020\proj_lab\data.json': Could not load contenttypes.ContentType(pk=7): (1062, "Duplicate entry 's2aclab-articletype' for key 'django_content_type.django_content_type_app_label_model_76bd3d3b_uniq'")

django_content_type表报错

进入mysql;选择项目数据库 use s2ac_db;查看表列表show tables;


mysql> select * from django_content_type
    -> ;
+----+-----------------+-------------+
| id | app_label       | model       |
+----+-----------------+-------------+
|  1 | admin           | logentry    |
|  3 | auth            | group       |
|  2 | auth            | permission  |
|  4 | auth            | user        |
| 11 | comment         | comment     |
|  5 | contenttypes    | contenttype |
| 10 | read_statistics | readdetails |
|  9 | read_statistics | readnum     |
|  7 | s2aclab         | articles    |
|  8 | s2aclab         | articletype |
|  6 | sessions        | session     |
+----+-----------------+-------------+
11 rows in set (0.00 sec)

mysql> delete from django_content_type;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`s2ac_db`.`auth_permission`, CONSTRAINT `auth_permission_content_type_id_2f476e4b_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))
删除外键关联表
mysql> delete from auth_permission;
Query OK, 33 rows affected (0.49 sec)
删除该表
mysql> delete from django_content_type;
Query OK, 11 rows affected (0.06 sec)

mysql>quit;