django sqlite3 mysql_Django项目数据库由sqlite3迁移到MySQL

Django项目默认 sqlite3 数据库, 生成的数据库名为 db.sqlite3 。sqlite3 仅供测试使用,可以通过配置修改为使用 mysql。

一、配置使用MySQL数据库

1、手动创建mysql数据库,例如db_Django03

create database db_django03 charset=utf8;

create database db_django03 charset=utf8;

2、在与项目同名的setting.py文件中,配置mysql

DATABASES = {

# Django默认配置使用sqlite3数据库

# 'default': {

# 'ENGINE': 'django.db.backends.sqlite3',

# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

# }

# 配置使用mysql

'default': {

'ENGINE': 'django.db.backends.mysql', # 数据库产品

'NAME': 'db_Django03', # 数据库名

'HOST': 'localhost', # 主机地址,本机使用localhost,生产环境为实际主机ip

'PORT': '3306', # 端口

'USER': 'root', # 用户名

'PASSWORD': 'mysql', # 密码

}

}

DATABASES = {

# Django默认配置使用sqlite3数据库

# 'default': {

# 'ENGINE': 'django.db.backends.sqlite3',

# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

# }

# 配置使用mysql

'default': {

'ENGINE': 'django.db.backends.mysql', # 数据库产品

'NAME': 'db_Django03', # 数据库名

'HOST': 'localhost', # 主机地址,本机使用localhost,生产环境为实际主机ip

'PORT': '3306', # 端口

'USER': 'root', # 用户名

'PASSWORD': 'mysql', # 密码

}

}

3、在python虚拟环境下安装 MySQL 驱动

pip install pymysql

pip install pymysql

4、在与项目同名的包下的 init.py 文件中,初始化MySQL驱动

# 初始化mysql驱动

import pymysql

pymysql.install_as_MySQLdb()

# 初始化mysql驱动

import pymysql

pymysql.install_as_MySQLdb()

二、迁移命令生成表

在配置完mysql的配置项后,需要进入到项目的根目录,在终端上执行两个命令,生成数据库表

1、生成迁移文件

python manage.py makemigrations

python manage.py makemigrations

2、生成数据库表

python manage.py migrate

python manage.py migrate

3、查看数据库表

68bfdf3476ef0c6acd06a67b23f67ce1.gif

此时的mysql中只有django默认生成的表,还没有自己定义的表,当定义了模型类后,需要执行两个迁移命令,才能生成表

只要模型类涉及到结构改变,也是需要重新执行两个迁移命令

注意:

1、确保Mysql用户表里为空的,如果之前有迁移过数据到Mysql,有可能会出错。注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是content_type相关的表。

2、如果在完成后运行项目报错:django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named ‘MySQLdb’

django首次迁移数据库报错:

68bfdf3476ef0c6acd06a67b23f67ce1.gif

安装mysqldb出错:

68bfdf3476ef0c6acd06a67b23f67ce1.gif

easy_install mysql-python 报错:

68bfdf3476ef0c6acd06a67b23f67ce1.gif

原因大概是python3与2的关系,网上很多处理方法是基于python2的:

处理方法:

pip install mysqlclient

sudo apt-get install python3-dev libmysqlclient-dev

pip install mysqlclient

sudo apt-get install python3-dev libmysqlclient-dev

再次运行迁移命令:

python manage.py makemigrations

python manage.py makemigrations

你可能感兴趣的:(django,sqlite3,mysql)