django迁移问题

面试题1:migrate怎么判断哪些迁移脚本需要执行:
他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。

面试题2:migrate做了什么事情:
将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。
如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrations中。
面试题3:执行migrate命令的时候报错的解决办法:
原因:
执行migrate命令会报错的原因是。数据库的django_migrations表中的迁移版本记录和代码中的迁移脚本不一致导致的。

解决办法:
使用–fake参数:
首先对比数据库中的迁移脚本和代码中的迁移脚本。然后找到哪个不同,之后再使用--fake,将代码中的迁移脚本添加到django_migrations中,但是并不会执行sql语句。这样就可以避免每次执行migrate的时候,都执行一些重复的迁移脚本。

终极解决方案:
如果代码中的迁移脚本和数据库中的迁移脚本实在太多,就是搞不清了。那么这时候就可以使用以下终极解决方案:
1. 终极解决方案原理:就是将之前的那些迁移脚本都不用了。重新来过。要将出问题的app下的所有模型和数据库中表保持一致,重新映射。
2. 将出问题的app下的所有模型,都和数据库中的表保持一致。
3. 将出问题的app下的所有迁移脚本文件都删掉。再在django_migrations表中将出问题的app相关的迁移记录都删掉。
4. 使用makemigrations,重新将模型生成一个迁移脚本。
5. 使用migrate --fake-initial参数,将刚刚生成的迁移脚本,标记为已经完成(因为这些模型相对应的表,其实都已经在数据库中存在了,不需要重复执行了。)
6. 可以做其他的映射了。
---------------------
作者:南窗客斯黄
来源:CSDN
原文:https://blog.csdn.net/nunchakushuang/article/details/80024753
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/rootid/p/10310430.html

时间: 2024-11-01 20:59:00

django迁移问题的相关文章

django迁移脚本

执行migrate报错的解决办法: 想知道migrate为什么报错,需要先了解migrate到底做了什么事情 migrate做了什么事情? 1.将相关的迁移脚本翻译成sql语句,然后在数据库中执行 2.如果sql语句执行没有问题,那么会将相关的迁移脚本的名字记录到数据库中django_migrations表中 migrate怎么判断哪些迁移脚本需要执行? migrate会将代码中的迁移脚本和数据库中的迁移脚本做对比,如果发现数据库中没有这个迁移脚本,便会执行 原因 执行migrate报错,是因为

Django 迁移错误 Cannot add foreign key constraint

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

Django模型迁移提示版本不匹配解决办法

Django迁移模型时提示django.core.exceptions.ImproperlyConfigured:mysqlclient 1.3.7 or newer is required; you have 0.9.3.错误解决办法 造成此错误提示是以为mysql服务器版本与Django内置的版本不一样造成的,可以通过修改源码的方式取消比对即可正常运行! 源码文件路径:你的虚拟环境目录下的lib目录下python工具包里面:比如的我python环境为dj_xm31,虚拟机位置在当前用户的.v

django项目环境搭建备忘

由于使用python3,所以尽量为每个项目配置虚拟环境来管理各个项目的=. 新建一个项目文件夹,进入该路径 python3 -m venv ll_env 然后激活虚拟环境 source ll_env/bin/activate 可使用deactivate命令停止使用虚拟环境 安装django: pip3 install django 创建项目: django-admin.py startproject project-name . 注意.不能丢,据说是为了后面部署项目会遇到一些配置问题.目前并不知

【Django】(2)Django模块创建应用程序

保持runserver还在运行,在manage.py相同的目录下,新开一个终端窗口,激活虚拟环境,执行startapp命令 python manage.py startapp learning_logs 定义模型models.py 在代码层面,一个模型就是一个类. 打开models.py,写入模型Topic,描述 学习日志 的主题. from django.db import models # Create your models here. class Topic(models.Model):

初识DJango框架

小白必会三板斧 HttpResponse:返回字符串 render:返回HTML页面 redirect:重定向 静态文件配置 什么是静态文件 网站所用到的 自己写好js 自己写好css 第三方的框架 bootstrap.fontwesome.sweetalert 通常情况下 网站所用到的静态文件资源 统一都放在static文件夹下 STATIC_URL = '/static/'是访问静态资源的接口前缀,也就是说,'/static/'就像一个令牌,只要是去访问静态资源,就必须先经过'/static

创建Django项目基础

目录 创建Django项目基础 首先介绍一下必备三模块 静态文件配置 什么是静态文件 手动配置静态文件访问资源 接口前缀 动态解析 form表单 request对象及方法 什么是request对象 如何获取请求方式 pycharm中django连接数据库 django连接MySQL django orm介绍 orm对象关系映射 优缺点: 注意事项: 怎样去创建一张表? 数据库迁移(同步)命令[很重要!!!] 字段和数据的增删改查 字段的增删改查 数据(记录)的增删改查 查询数据get与filte

django报错:django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?

django 迁移数据库报错 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.Did you install mysqlclient? 解决方案:在settings.py同级目录中的__init__.py文件中加入: import pymysql pymysql.install_as_MySQLdb() 原文地址:https://www.cnblogs.com/pfeiliu/p/12045021

Django模型修改及数据迁移

Migrations Django中对Model进行修改是件麻烦的事情,syncdb命令仅仅创建数据库里还没有的表,它并不对已存在的数据表进行同步修改,也不处理数据模型的删除. 如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改或者使用South.Django 1.7中已经集成了South的代码,提供了3个新命令: migrate: 用于执行迁移动作,具有syncdb的功能 makemigrations: 基于当前的model创建新的迁移策略文件 sql