一、sqlite3
1.异常处理
- 异常1:SQLite 3.8.3 or later is required (found 3.7.17)
解决方法:更新sqlite3
转载:https://blog.csdn.net/qq_39969226/article/details/92218635 - 异常2:sqlite3.NotSupportedError: URIs not supported
解决方法:修改源码
转载:https://blog.csdn.net/zhuangmezhuang/article/details/82776272
二、mysql
1.创建数据库
utf8能够存下大部分中文汉字,而utf8mb4可以看作是utf8的超集,额外包含了类似emoij表情符号的字符和一些不常用的汉字(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上)
CREATE DATABASE typeidea_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
2.配置 settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'typeidea_db',
'USER': '****',
'PASSWORD': '****',
'HOST': '****',
'PORT': 3306,
# 配置django和数据库的持久化连接,默认值为0
'CONN_MAX_AGE': 5 * 60,
# 配置数据库连接的字符集
'OPTIONS': {'charset': 'utf8mb4'},
},
}
OPTIONS用来配置mysqlclient的连接,如配置连接的字符集;
CONN_MAX_AGE:用来配置django和数据库的持久化连接
django中数据库的连接逻辑是每来一个新的请求就会创建一个新的数据库连接,请求结束时会关闭对应的数据库连接,当并发量过大来不及关闭连接时,会导致连接数不断增多,此时数据库层会抛出too many connections错误
多线程部署项目或使用gevent运行项目时不建议配置CONN_MAX_AGE,数据库的连接无法复用
3.安装模块mysqlclient
pip install mysqlclient
4.替代方案:安装pymysql
- 如何安装mysqlclient失败了,可以安装pymysql替代
pip install pymysql
- 在项目的初始化文件中添加
#__init__.py
import pymysql
pymysql.install_as_MySQLdb()
django2.2版本会报错:mysqlclient 1.3.13 or newer is required; you have 0.9.3
解决方案参考:https://blog.csdn.net/weixin_33127753/article/details/89100552
三、sqlite3数据导入mysql
1.导出数据
python manage.py dumpdata > data.json
2.配置mysql
- settings.py中修改数据库配置为mysql
- 在mysql中创建项目数据库
- 执行数据库同步
python manage.py makemigrations
python manage.py migrate
- 导入数据
python manage.py loaddata data.json
- 如果导入失败了,检查下面2张表是否有数据,有则清空
delete from auth_permission;
delete from django_content_type;
参考:https://www.django.cn/article/show-17.html