python测试开发django-72.删除表后如何重新生成表

前言

在使用ORM建表的时候,由于需要对数据库表的重新设计,需要删除原表,并通过Django的ORM功能重新同步表。
删除表之后,发现用 makemigrations 和 migrate 无法生成新的表了。

遇到问题

当我新建一个 Model ,同步完数据库后,再修改里面的字段名称,发现无法同步到数据库,于是就把数据库里面的整张表删除了。
结果再同步数据库就无法生成新的表了,就算删除 migrations 目录下的0001_initial.py文件也一样。

# 新建了一个PersonIn类,继承自models.Model,
class PersonIn(models.Model):
    uid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=30)
    agex = models.IntegerField()

删除 migrations 目录下的0001_initial.py文件

执行 makemigrations 和 migrate 无法生成新的表了

D:\soft\MyDjango>python manage.py makemigrations
Migrations for 'yoyo':
  yoyo\migrations\0001_initial.py
    - Create model PersonIn

D:\soft\MyDjango>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, yoyo
Running migrations:
  No migrations to apply.

D:\soft\MyDjango>

结果没生成新的表

解决办法1

如果删除后,无法自动生成,首先想到的解决办法,可以先查询到建表的sql,自己去执行sql建表

python manage.py sqlmigrate your_app_name 0001

cmd执行上面的命令,your_app_name 换成自己的 app 名称

D:\soft\MyDjango>python manage.py sqlmigrate yoyo 0001
BEGIN;
--
-- Create model PersonIn
--
CREATE TABLE `yoyo_personin` (`uid` integer NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `agex` integer NOT NULL);
COMMIT;

于是得到建表的SQL,去数据库执行下就可以了

解决办法2

上面的办法只能从表面上解决问题,不能解决根本问题,根本的原因是因为在 django_migrations 表里面已经生成表记录了。

执行 SQL 删除app相关的记录

delete from django_migrations where app=‘ your_app_name‘

执行完成后,再执行makemigrations 和 migrate就可以同步成功了

D:\soft\MyDjango>python manage.py makemigrations
No changes detected

D:\soft\MyDjango>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, yoyo
Running migrations:
  Applying yoyo.0001_initial... OK

看到 OK 说明成功了

原文地址:https://www.cnblogs.com/yoyoketang/p/11823630.html

时间: 2024-10-29 06:01:43

python测试开发django-72.删除表后如何重新生成表的相关文章

python测试开发django-16.JsonResponse返回中文编码问题

前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面的User表,测试数据如下 user_name psw mail yoyo 123456 [email protected] yoyo2 111111 1 yoyo5 111111 0 接着上一篇[python测试开发django-15.查询结果转json(serializers)],如果数据库里面

2019第一期《python测试开发》课程,10月13号开学

2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20:30-22:30 报名费:报名费2000一人(周期2个月) 联系QQ:283340479 课表如下 课程主要涉及的内容: 1.httprunner框架以及web平台做接口自动化测试 (装逼必备) 2.django平台开发 (python开发必会) 3.pytest框架结合selenium做web自动化测试 (

python测试开发之_字符串练习

编程学习是个漫长.逐渐累加复杂度.综合难度的一门工程.需要自我驱动,督促自己往前走.Python测试开发是本年度重点学习目标. 今天来一个字符串的练习题,重在思路,不断训练自己的思维. 题目:找出字符串中出现次数最多的字符,并输出其出现的位置 代码实现: #encoding=UTF-8 s = "aaabbbhhiijk" letter_count_dict={} for i in s: if letter_count_dict.has_key(i): #判断是否在字典中出现过 let

Python测试开发-创建模态框及保存数据

Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎么实现这种弹出效果,bootstrap已经为我们提供了相应的组件. 1.界面原型 点击添加,弹出模态框, 然后输入 用户:tester, 消息:你好.如下图1所示: ▲图1 再点击保存,那么数据库就存入了以上输入的数据,查看界面的用户列表会显示tester,如下图2所示: ▲图2 2.开发过程 接下

python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布局用到的是django-crispy-forms框架,本篇详细讲下django-crispy-forms的官方文档案例 django-crispy-forms 当我们使用xadmin后台的时候,在INSTALLED_APPS里面同时添加了xadmin和crispy_forms这2个app,xadmi

Python自动化开发 - Django基础

本节内容 一.什么是web框架 二.MVC和MTV视图 三.Django基本命令 四.路由配置系统 五.编写视图 六.Template 七.ORM 一.什么是web框架 对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器就是一个socket客户端 #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("

python测试开发django-60.使用token登录(TokenAuthentication)

前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token. 环境准备: python 3.6 django 2.1.2 TokenAuthentication django rest framework权限和认证有四种方式: BasicAuthentication 此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名.基本身份验证通常仅

python测试开发django-47.xadmin上传图片和文件

前言 xadmin上传图片和上传文件功能 models模块设计 先设计一个model,用ImageField存放图片,FileField放文件,upload_to参数是存放的目录 # models.py from django.db import models from django.utils import timezone # Create your models here. class FileImage(models.Model): '''上传文件和图片''' title = model

python测试开发django-2.templates模板与html页

前言 Django 中的视图的概念是一类具有相同功能和模板的网页的集合.通俗一点来说,就是你平常打开浏览器,看到浏览器窗口展示出来的页面内容,那就是视图. 前面一章通过浏览器访问http://127.0.0.1:8000能在页面上展示出hello world的纯文本内容,通常我们打开浏览器页面,展示的是一个html页面,本篇讲下如何打开html页面. 新建应用 上一篇通过"django-admin startproject helloworld"是创建项目,一个项目下可以有多个应用(a