转 dango的模型总结 and django-关于manage.py migrate无效的问题
http://iluoxuan.iteye.com/blog/1703061
1:用过django就知道django的model有多方便:
首先介绍下django的模型有哪些属性:先看例子:
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。以下对此作一总结:
- abstract
name=models.CharField(max_length=100)
GENDER_CHOICE=((u'M',u'Male'),(u'F',u'Female'),)
gender=models.CharField(max_length=2,choices=GENDER_CHOICE,null=True)
class Meta:
abstract=True
class Employee(Human):
joint_date=models.DateField()
class Customer(Human):
first_name=models.CharField(max_length=100)
birth_day=models.DateField()
上面的代码,执行python manage.py syncdb 后的输出结果入下,可以看出Human表并没有被创建:
Creating tables ...
Creating table myapp_employee
Creating table myapp_customer
Installing custom SQL ...
Installing indexes ...
No fixtures found.
- app_label
app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包下的models.py文件中,这时候你需要指定你这个模型类是那个应用程序的。比如你在其他地方写了一个模型类,而这个模型类是属于myapp的,那么你这是需要指定为:
- db_table
- db_tablespace
- get_latest_by
- managed
- order_with_respect_to
这个选项一般用于多对多的关系中,它指向一个关联对象。就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_XXX_order()和set_XXX_order()的方法,通过它们你可以设置或者回去排序的对象。
- ordering
ordering=['-order_date'] # 按订单降序排列,-表示降序
ordering=['?order_date'] # 随机排序,?表示随机
- permissions
- proxy
- unique_together
- verbose_name
- verbose_name_plural
这个选项是指定,模型的复数形式是什么,比如:
如果不指定Django会自动在模型名称后加一个’s’
- class Register(models.Model):
- id = models.IntegerField(primary_key = True, db_column="ID")
- mid = models.IntegerField(db_column = "MID")
- name = models.CharField(max_length = 10 , db_column = "NAME")
- nickName = models.CharField(max_length = 100 ,db_column = "NICK_NAME")
- slo = models.CharField(max_length = 50, db_column = "SLOGAN")
- status = models.SmallIntegerField(db_column = "STATUS")
- cnt = models.IntegerField(db_column = "CNT")
- createdDate = models.DateTimeField(db_column = "CREATED_DATE")
- class Meta:
- db_table = "A111208FACTIONVOTETOP10_REGISTER"
- managed = False
django-关于manage.py migrate无效的问题
问题描述:
已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,提示No migrations to apply. 表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼
排查过程
python manage.py dbshell 进到数据库里面,查看是否表已存在
结果:表不存在
检查migrations文件
结果:文件没问题
百度 google 各种搜,乱投医,各种尝试
解决方案
python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
python manage.py migrate 好啦,大功告成
原因分析
查看django_migrations表结构
建表语句:
CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL);
原因
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
避免方案
有强迫症删除migrations文件的同学(比如我),请同时到数据库中删除相应记录
没有强迫症的同学,可以继续生成新的migrations,旧的就不必理会了
题外话
执行python manage.py migrate之后,可以使用python manage.py sqlmigrate appname migrations_num(例如python manage.py sqlmigrate user 0002)查看当前migrations文件对应的sql语句。
另外,在使用上述命令查看0002文件的sql语句时发现,django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。
---------------------
作者:Jessie-via
来源:CSDN
原文:https://blog.csdn.net/qq_25730711/article/details/60327344
版权声明:本文为博主原创文章,转载请附上博文链接!
###########sample
django-关于manage.py migrate无效的问题 不能创建新表
8.Exception Value: (1146, "Table 'db_monitor.tab_alarm_info' doesn't exist") ,
原因是因为参数managed = False 控制的,屏蔽这个参数即可
1
fram/model.py
managed = False
to
# managed = False
2.
delete 001_initial.py
3.
mysql> delete from django_migrations where app='frame';
commit;
4.
--create 0001_initial.py file
python2 manage.py makemigrations
5.
--create table in database
python2 manage.py migrate
转 dango的模型总结 and django-关于manage.py migrate无效的问题的更多相关文章
- Django中manage.py migrate无效的问题
在改变Django-model中结构后,makemigrations可以识别到改变但migrate没有操作,数据库中表结构也没有改变,原因如下: 在由Django-model自动生成的数据库表中有名为 ...
- python后台架构Django教程——manage.py命令
一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...
- Django笔记 manage.py脚本的使用
1. 管理Django项目 python manage.py startproject projectname # 新建Django project ~~projectname是自己的项目名称 pyt ...
- Django 中 python manage.py makemigrations 与 python manage.py migrate
执行 python manage.py makemigrations django根据settings.py里面的INSTALLED_APPS项设置找到对应app里的models.py,应用里面创建的 ...
- 【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来
[问题原因]:django工程中存在多个应用,每个应用都指定了对应的数据库.执行python manage.py migrate命令时没有指定数据库,将只初始化默认的default数据库. [解决方案 ...
- Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途
生成一个临时文件 python manage.py makemigrations 这时其实是在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_ini ...
- django中表变更后migrate无效的问题
问题描述: 已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrat ...
- Django使用manage.py备份与恢复数据
Django dumpdata and loaddata django database model dumpdata dumpdata command It is a django manageme ...
- No module named _sqlite3 django python manage.py runserver
linux 执行django(python manage.py runserver),报错No module named _sqlite3,需要安装sqlite-devel,再重新编译安装python ...
随机推荐
- multi-mechanize安装实践
关于multi-mechanize的详细介绍参见如下链接,是其官网 http://testutils.org/multi-mechanize/setup.html multi-mechanize是一款 ...
- PCL —— RCNN Family 中层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/6046411.html RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常 ...
- repo的一些用法
repo的用法注:repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库.(也就是说,他是用来管理给git管理的一个个仓库的) 1.下载r ...
- static的功能
static : 翻译成中文是静态的意思. 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系. 在C语言中,static的 ...
- C# 使用SendMessage 函数
在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时候还是 ...
- 数据加密实战之记住密码、自动登录和加密保存数据运用DES和MD5混合使用
MD5的简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有 ...
- javascript dom与字符串相互转换
js dom与字符串相互转换 一.字符串转换dom: function stringToDom(str){ var obj=document.createElement("div" ...
- Python3 中类的反射
1.针对类中方法的反射 # 反射的使用 class Dog(object): def __init__(self,name): self.name = name def eat(self): prin ...
- CHTools-OC版本目录介绍
1.CHOCBase 这里主要讲的是Objective-C语言的基础语法. 2.CHViewControllers 3.CHNS类 5.CHUI类 这里是CHUI类的集合,用于处理界面显示,其中包含部 ...
- MySQL运维及开发规范
一.基础规范 (1) 使用INNODB存储引擎 (2) 表字符集使用UTF8 (3) 所有表都需要添加注释 (4) 单表数据量建议控制在5000W以内 (5) 不在数据库中存储图.文件等大数据 (6) ...