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

一.Django 配置MySQL数据库

在settings.py中配置

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中,如上。)添加如下代码即可。

import pymysql
pymysql.install_as_MySQLdb()

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

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配置,如果已经修改了,请先修改回来:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

然后在CMD命令行里输入:

python manage.py dumpdata > data.json

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

2、MySQL导入数据

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

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

然后在CMD命令行里输入:

python manage.py loaddata data.json

注意:

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

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

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命令导入该文件即可:

mysql -u root -p mysql < timezone_posix.sql

4、MySQL数据到PostgreSQL

操作很简单:

python manage.py dumpdata > backup.json

到PostgreSQL对应的配置中:

python manage.py loaddata backup.json

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

1.生成模型文件

python3 manage.py inspectdb

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

创建app

python3 manage.py startapp 'app名字'

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

python3 manage.py inspectdb > app/models.py

DJango配置mysql数据库以及数据库迁移的更多相关文章

  1. Django配置Mysql数据库 (Pycharm)

    Django配置MySQL数据库方法 一.settings.py文件中修改数据库配置为下面的内容: # Database # https://docs.djangoproject.com/en/2.0 ...

  2. Django 配置MySQL数据库 mysql

    Django 配置MySQL数据库 在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # ...

  3. django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x97\\xAE\\xE9\\xA2\\x98' for column 'name' at row 5")

    django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x ...

  4. Django 配置MySQL数据库

    在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'my ...

  5. Django配置MySQL数据库

    一.在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': ' ...

  6. 【python-Django开发】Django 配置MySQL数据库讲解!!!

    官方文档请阅读:https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-db-api-drivers 配置MySQL数据库 1. 新建M ...

  7. django配置-mysql数据库相关配置

    Django3版本之前的配置 1. Django默认配置的数据库是sqlite 2. 使用mysql数据库需要下载的包 pip3 install PyMySQL 3. Django配置PyMySQL ...

  8. 安装ejabberd2并配置MySQL为其数据库

    以前用过openfire做为服务器,但是openfire的集群支持不是很好,所以改用Ejabberd,由于它是用Erlang语言开发的,其并发率与分布式的功能都是很强悍的,在此我记录一下我的安装与配置 ...

  9. Django配置mysql

    我的环境为windows10+pyhton3.6+Django1.11.4 由于mysqldb不支持python3,所以django连接MySQL就不能再使用mysqldb了.故而选择了mysqlcl ...

随机推荐

  1. 实验吧CTF练习题---安全杂项---异性相吸解析

    ---恢复内容开始--- 实验吧安全杂项之异性相吸   地址:http://www.shiyanbar.com/ctf/1855 flag值:nctf{xor_xor_xor_biubiubiu}   ...

  2. Java 并发编程(二):如何保证共享变量的原子性?

    线程安全性是我们在进行 Java 并发编程的时候必须要先考虑清楚的一个问题.这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗? 我这个人,在没有副业之前,一心 ...

  3. html5表单与Jquery Ajax配合使用

    html5的表单控件提供了很多格式检测功能,可以省去很多烦人的javascript验证代码,例如pattern属性和require属性,但触发的条件是表单提交,如果想通过ajax提交表单,就出现了不能 ...

  4. Ubuntu 14.04 java环境安装配置(不是openJAVA)

    两种配置方式 第一: 在 Ubuntu 中使用 PPA 安装 Java 8 ( 支持 Ubuntu 10.04 - Ubuntu 14.04 ): sudo add-apt-repository pp ...

  5. 获取contenteditable区域光标所在位置信息

    在我们使用contenteditable编辑时,有时需要光标位置的信息. <div contenteditable="true" style="min-height ...

  6. Linux环境下进行分布式压测踩过的坑

    背景:公司为了满足大并发的情况,需要测试组配合,就需要分布式压测,这里我把我踩过坑都记录下来: 环境:Linux + jmeter-v.5.1.1;使用3台2核4G的压力机: Q1: Server f ...

  7. Spark比MR快是因为在内存中计算?错!

    MapReduce 就像一台又慢又稳的老爷车,虽然距离 MapReduce 面市到现在已经过去了十几年的时间,但它始终没有被淘汰,任由大数据技术日新月异.蓬蓬勃勃.花里胡哨地发展,这个生态圈始终有它的 ...

  8. [C++] 类的设计(2)——拷贝控制(1)

    1.一个类通过定义五种特殊的成员函数来控制此类型对象的拷贝.移动.赋值和销毁:拷贝构造函数.拷贝赋值运算符.移动构造函数.移动赋值运算符和析构函数.(拷贝.移动.析构)   2.拷贝和移动构造函数定义 ...

  9. JavaScript之JSON&AJAX

    今天为大家讲解JavaScript中非常流行的数据传输形式JSON和异步技术AJAX技术. 一 JSON JSON的全称是JavaScript Object Notation(js对象表示法),它是一 ...

  10. 三段式有限状态机Verilog代码

    状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心.有限状态机简写为FSM(Finite State Machine),主 ...