1.MySQL与SQLite对比
| MySQL | SQLite | |
|---|---|---|
| 特点 | 为服务器端设计 | 轻量级可嵌入 |
| 高并发访问 | 支持 | 不支持 |
| 占用内存 | 比SQLite大 | 小 |
| 实用性 | 服务器 | 适合桌面和移动应用 |
2. 安装与配置 ck hhxxttxs
管理员身份启动cmd,进入Mysql安装目录的bin下
net start MySQL 启动服务mysql -h localhost -u root -p 登录Enter password: *Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 10Server version: 8.0.20 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database s2ac_db default charset=utf8mb4 default collate utf8mb4_unicode_ci;Query OK, 1 row affected (0.67 sec)mysql> show databases;+--------------------+| Database |+--------------------+| firstdb || information_schema || mysql || performance_schema || s2ac_db || studb || sys |+--------------------+7 rows in set (0.00 sec)mysql> quitBye
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;
