前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DJango配置mysql数据库以及数据库迁移

DJango配置mysql数据库以及数据库迁移

作者头像
小小咸鱼YwY
发布2020-06-19 16:06:06
5.9K0
发布2020-06-19 16:06:06
举报
文章被收录于专栏:python-爬虫python-爬虫

DJango配置mysql数据库以及数据库迁移

一.Django 配置MySQL数据库

在settings.py中配置

代码语言:javascript
复制
import pymysql           # 配置MySQL
pymysql.install_as_MySQLdb()
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
        'NAME': 'mydb',         # 你要存储数据的库名,事先要创建之
        'USER': 'root',         # 数据库用户名
        'PASSWORD': '1234',     # 密码
        'HOST': 'localhost',    # IP
        'PORT': '3306',         # 数据库使用的端口
    }
}

数据库结构迁移

Python3不支持MySQLdb,可用pymysql代替。

1.首先,在Python虚拟环境下安装pymysql:pip install pymysql。

2.然后,在项目文件夹下的_init_.py(实际上也可以添加到settings.py中,如上。)添加如下代码即可。

代码语言:javascript
复制
import pymysql
pymysql.install_as_MySQLdb()

3.再者,在Terminal中执行数据库迁移命令:

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate

温馨提示:若执行python manage.py makemigrations时提示"No changes detected",
则试试先执行python manage.py makemigrations --empty appname解决问题。

二.数据迁移

把SQLite数据导入到MySQL中

之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据。如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去。

1、SQLite导出数据

导出之前,我们先确保settins.py数据库配置选项那里,还是使用的是SQLite配置,如果已经修改了,请先修改回来:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

然后在CMD命令行里输入:

代码语言:javascript
复制
python manage.py dumpdata > data.json

这样就将数据导出到Django项目根目录下的data.json文件。

2、MySQL导入数据

同样,先将Django的数据库配置改为MySQL的:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的数据库名',
        'USER': '你的MySQL用户名',
        'PASSWORD': '你的密码',
        'HOST': 'IP',
        'PORT': '3306',
    }
}

然后在CMD命令行里输入:

代码语言:javascript
复制
python manage.py loaddata data.json

注意:

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

进入到MySQL,执行如下的SQL语句:

代码语言:javascript
复制
use 你的数据库名;
delete from auth_permission;
delete from django_content_type;

删除数据之后,再执行一次导入命令即可。基本上,导入不了数据都是MySQL存在数据导致的。

3、加载时区表

另外,有可能所安装的MySQL没有加载时区表。这个可能会导致filter对日期的查询有问题。Django官方文档也指出这个问题。MySQL官网也有对应处理方法:加载时区表

Linux/Mac解决方法都很简单。windows系统要先下载一个sql文件:timezone_2018e_posix_sql.zip

下载完成之后,解压得到一个sql文件,再执行cmd命令导入该文件即可:

代码语言:javascript
复制
mysql -u root -p mysql < timezone_posix.sql

4、MySQL数据到PostgreSQL

操作很简单:

代码语言:javascript
复制
python manage.py dumpdata > backup.json

到PostgreSQL对应的配置中:

代码语言:javascript
复制
python manage.py loaddata backup.json

三.不同APP之间的数据库迁移

1.生成模型文件

代码语言:javascript
复制
python3 manage.py inspectdb

2.将模型文件导入到app当中

创建app

代码语言:javascript
复制
python3 manage.py startapp 'app名字'

3.将模型导入创建的app中

代码语言:javascript
复制
python3 manage.py inspectdb > app/models.py
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DJango配置mysql数据库以及数据库迁移
    • 一.Django 配置MySQL数据库
      • 在settings.py中配置
      • 数据库结构迁移
    • 二.数据迁移
      • 把SQLite数据导入到MySQL中
      • 1、SQLite导出数据
      • 2、MySQL导入数据
      • 3、加载时区表
      • 4、MySQL数据到PostgreSQL
    • 三.不同APP之间的数据库迁移
      • 1.生成模型文件
      • 2.将模型文件导入到app当中
      • 3.将模型导入创建的app中
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档