django迁移脚本

执行migrate报错的解决办法:

想知道migrate为什么报错,需要先了解migrate到底做了什么事情

migrate做了什么事情?

1.将相关的迁移脚本翻译成sql语句,然后在数据库中执行

2.如果sql语句执行没有问题,那么会将相关的迁移脚本的名字记录到数据库中django_migrations表中

migrate怎么判断哪些迁移脚本需要执行?

migrate会将代码中的迁移脚本和数据库中的迁移脚本做对比,如果发现数据库中没有这个迁移脚本,便会执行

原因

执行migrate报错,是因为django项目中的迁移脚本和数据库里的django_migrations迁移脚本记录不一致导致报错

解决办法

使用--fake参数

首先对比数据库中的迁移脚本和代码中的迁移脚本,找到哪个不同,然后使用--fake,将代码中的迁移脚本添加到‘django_migrations‘里,但是不会执行sql语句,这样就避免每次执行migrate的时候重复调用迁移脚本

终极解决方案

如果代码中的迁移脚本和数据库中的脚本实在太多,就是搞不清了,那么这个时候可以用终极解决方案

1.将代码中的迁移脚本和数据库中的迁移脚本全部删除

2.确保app中models的字段和数据库中的字段一致

3.使用 python manager.py makemigrations重新生成迁移脚本

4.使用python manager.py migrate --fake-initial将刚刚生成的迁移脚本,标记为已完成(因为这些模型相对应的表,其实在数据库里都已经存在了,不需要重复执行)

原文地址:https://www.cnblogs.com/fengzi7314/p/10965085.html

时间: 2024-10-10 23:03:21

django迁移脚本的相关文章

MySQL 数据迁移脚本

用python写了个数据迁移脚本,主要是利用从库将大的静态表导出表空间,载导入到目标实例中. #!/usr/bin/env python3 #-*- coding:utf8 -*- #author:zhanbin.liu #!!!!!DB必须同版本 #python3环境 pip3 install pymysql paramiko import os #from pathlib import Path import sys import pymysql import paramiko #每次只能迁

django迁移问题

面试题1:migrate怎么判断哪些迁移脚本需要执行:他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本. 面试题2:migrate做了什么事情:将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句.如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrations中.面试题3:执行migrate命令的时候报错的解决办法:原因:执行migrate命令会报错

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/MySQL/data目录下的数据迁移到/data/local/mysql/mysqlData. 原因是系统盘太小,只有20G,几下就快满了. 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本. 步骤如下: 1) 先修改好/etc/my.cnf, ##[mysqld] ##datadir=/data/local/mysql/mysqlData/data 2)编写mysql_datadir_move.sh #!/bin/bash echo 1 mk

mysql数据不完整迁移脚本

公司新平台上线,老数据库中有一些原本的用户数据需要迁移到新平台,特地开发这个脚本,以保证数据的完整性,以及效率性 #!/bin/bash ##到出旧数据库中需要的表 echo "请在脚本语言目录下准备3个文件,一个为tables.txt,里面列出需要从旧数据库中导出的表名,另一个是oldmysqlauth旧数据库的用户账号密码以及数据库,第三个是newmysqlauth新数据库的用户账号密码以及数据库,分别列出格式为:        1        2        3 ..." c

SQLServer的Login迁移脚本

背景:公司的数据由SQLServer2008 R2升级至SQLServer2012,并配置了AlwaysOn,本脚本用于将主节点的Login迁移至辅助节点. 1.在主节点执行以下脚本创建存储过程: USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @h

centos 7 安装django 简单脚本

#!/bin/sh [ ! -d "~/temp/" ] && mkdir ~/temp/  cd ~/temp/ echo "###download setuptool" wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea --no-check-certifica

Python数据库迁移脚本(终极版)

上次的那几个脚本这次全部整合到了一起,而且后面发现了一个可以使用的ODBC包,于是这次采用的方式就很简单了,直接通过ODBC将InterBase数据库中的数据全部取出来之后通过Python的sqlalchemyORM框架直接连接远程的MySQL数据库,之后便可以方便的传递数据了,当然,作为我的终极完善版本,自动模式和手动模式是少不了的了,在自动模式中将自动检查InterBase数据库是否存在,如果不存在则自动restore,然后自己创建InterBase的数据源,之后便可以取出数据了,下面是流程

Django 迁移错误 Cannot add foreign key constraint

错误分析 更换数据库后 字符集错误 就是原来的库和新的库在外键的字符集上不一样 如图: 解决方案: 1.迁移先需要失败一次(既然出现了这个错误,说明已经迁移了一次) 2.修改当前表外键字段的字符集(或者说COLLATE),修改为外键关联表的字符集 查看表的创建语句(主要是查看外键关联表主键的字符集) SHOW CREATE TABLE `user_group` (查看创建表的命令) 修改字符集 ALTER TABLE user_group_info MODIFY employee_id VARC

数据迁移脚本

1 classes = %w(Call City Province Tag) 2 classes.each do |obj_name| 3 obj = Object.const_get(obj_name) 4 obj.establish_connection :production 5 models = obj.all.to_a 6 obj.establish_connection :development 7 ActiveRecord::Base.transaction do 8 models