dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2198
  • 铜币14098枚
  • 威望6121点
  • 银元155个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:344回复:0

如何将 django数据库 sqlite3迁移到 mysql?

楼主#
更多 发布于:2019-02-12 15:32
目标
1. 将 django 项目默认使用的 sqlite3数据库,调整为 mysql数据库 。
2. 将 sqlite3 中的数据,迁移到 mysql数据库。

环境
Django-1.11
Python-3.4

准备工作
1. 创建一个 MySQL 服务器,方便演示使用 docker 创建 mysql 容器。
docker run --name mysql-server -t \
       -e MYSQL_DATABASE="cmdb" \
       -e MYSQL_USER="admin" \
       -e MYSQL_PASSWORD="admin0" \
       -e MYSQL_ROOT_PASSWORD="admin0" \
       -e TZ=Asia/Chongqing \
       -v /etc/localtime:/etc/localtime:ro \
       -v mysql-data:/var/lib/mysql \
       -d mysql:5.7 \
         --character-set-server=utf8 \
         --collation-server=utf8_general_ci \
         --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2. 为 django 安装 pymysql包
# python3 不再支持 mysqldb包,所以使用 pymysql包与 mysql服务器进行通信。
pip install pymysql

# 在项目根目录下中的__init__.py文件中添加以下代码:
vim cmdb/cmdb/__init__.py
#
import pymysql
pymysql.install_as_MySQLdb()

操作步骤
1. 导出备份数据
python manage.py dumpdata > all.json

2. 修改 settings.py 配置文件
# 将 mysql 数据库添加到 setting.py文件中,类似如下:
vim cmdb/cmdb/settings.py
#
DATABASES = {
    #'default': {
    #    'ENGINE': 'django.db.backends.sqlite3',
    #    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #},
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "cmdb",
        "USER": "root",
        "PASSWORD": "admin0",
        "HOST": "172.17.0.2",    # mysql 容器 ip地址
        "PORT": "3306",
    },
}

3. 创建表结构
python manage.py migrate

4. 删除无效数据
# 登录 django shell控制台,导入 ContentType模型 ,并其删除数据
python manage.py shell
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
(44, {'users.User_user_permissions': 0, 'auth.Permission': 33, 'contenttypes.ContentType': 11, 'auth.Group_permissions': 0})
>>> quit()

5. 迁移/导入备份数据
python manage.py loaddata all.json
Installed 134 object(s) from 1 fixture(s)

6. 检查数据库

描述:django-migrate-sqlite-mysql

图片:django-sqlite-mysql.png

django-migrate-sqlite-mysql


验证
# 启动服务器,并使用浏览器访问,检查是否正常。
python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
February 12, 2019 - 15:19:30
Django version 1.11, using settings 'cmdb.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[12/Feb/2019 15:19:35] "GET / HTTP/1.1" 302 0
[12/Feb/2019 15:19:35] "GET /users/login/?next=/ HTTP/1.1" 200 3534
[12/Feb/2019 15:19:37] "POST /users/login/ HTTP/1.1" 302 0
[12/Feb/2019 15:19:37] "GET / HTTP/1.1" 200 19618

参考
What's the best way to migrate a Django DB from SQLite to MySQL?
#
欢迎关注微信公众号: 运维录
游客

返回顶部