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 说明成功了
python测试开发django-72.删除表后如何重新生成表的更多相关文章
- python测试开发django-16.JsonResponse返回中文编码问题
前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...
- python测试开发django-rest-framework-63.基于函数的视图(@api_view())
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...
- python测试开发django-197.django-celery-beat 定时任务
前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...
- python测试开发django-36.一对一(OneToOneField)关系查询
前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...
- python测试开发django-15.查询结果转json(serializers)
前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...
- 2019第一期《python测试开发》课程,10月13号开学
2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...
- 【python测试开发栈】python基础语法大盘点
周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...
- python web开发——django学习(一)第一个连接mysql数据库django网站运行成功
1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message 4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表 6.运行 ...
- Python测试开发-创建模态框及保存数据
Python测试开发-创建模态框及保存数据 原创: fin 测试开发社区 前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...
随机推荐
- [LeetCode] 255. Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- Salesforce - 建立轮循机制的潜在客户分配规则
客服中心经常会遇到由多个客服轮流分配接进来的订单,例如你有100个订单进入系统,你希望五个客服每人分配20个,也就是一种小组的轮换机制,常被称为“轮询” 这种循环分配规需要保证平均分配给客服新的订单记 ...
- python总结九
1.sql语句: ,; 解释:由hire_date进行排序,降序desc,最大的就是最晚进来的员工,limit 如果是只有一个参数的话,那么说明是除了前面多少个数据, 如果后面有两个参数的话,那么就 ...
- oracle--JOB任务
1.创建一张测试表 -- Create table create table A8 ( a1 VARCHAR2(500) ) tablespace TT1 pctfree 10 initrans 1 ...
- 推荐一款移动端小视频App声咖视频
推荐一款移动端小视频App声咖视频 1 介绍 声咖app,这款软件是一款声音交友社交软件,在上面你可以轻松互动,找到你的知心朋友,并且可以自由添加好友,与其他人互动,让交友更加轻松!, 2 特色功能介 ...
- Spring Boot 代码覆盖率测试
代码覆盖率测试是规范软件开发流程里一个必不可少的环节.一般都是在PG末尾阶段,伴随着IT自测产生. ↑以上,是自己yy出来的啊,反正我司是这样要求的.不跑覆盖率,鬼知道你在代码里夹杂了一些什么东西. ...
- Leetcode 344:Reverse String 反转字符串(python、java)
Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input strin ...
- layui.dropdown.js
前 在 layui 框架下做了一个小组件,是下拉框功能,当然也可以很好的变成其他组件,前提你会修改. 还需要更多的完善.后期(我也不清楚会是啥时候会优化)
- Redis学习之Redis服务器数据库实现
本文内容: 1.Redis服务器保存数据库的方法 2.客户端切换数据库的方法 3.数据库保存键值对的方法 4.数据库的添加,删除,查看,更新操作的实现方法 5.服务器保存键的过期时间的方法 6.服务器 ...
- Python 学习:常用函数整理
整理Python中常用的函数 一,把字符串形式的list转换为list 使用ast模块中的literal_eval函数来实现,把字符串形式的list转换为Python的基础类型list from as ...