转 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 ...
随机推荐
- eclips git中的add to Index无效解决
今天在使用eclips git中的add to Index,发现其无效,具体如下 问题描述: 通过export导入一个git java项目 在java工程中新增一个类文件IndicatorCalcTe ...
- Windows系统 为 QT5软件 搭建 OpenCV2 开发环境
Windows系统 为 QT5软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Qt5 软件:Qt 5. 7. 0 OpenCV2 版本:OpenCV2.4.10 1 ...
- windows7向github提交代码
首先要有一个github账号. 我自己申请了github账号,然后创建一个代码仓库. 这个是我创建好的代码仓库:里面是空的没有代码,我今天从我本地写好的代码,传到github上面去. 首先需要告诉gi ...
- Java50道经典习题-程序29 求矩阵对角线之和
题目:求一个3*3矩阵对角线元素之和分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出. 例如:下面矩阵的对角线之和为24 1 4 6 2 5 3 9 7 8 public cla ...
- Axure RP7.0移动互联网产品原型设计 中文pdf扫描版
移动互联网原型设计,简单来说,就是使用建模软件制作基于手机或者平板电脑的App,HTML 5网站的高保真原型.在7.0 之前的版本中,使用Axure RP进行移动互联网的建模也是可以的.比如,对于桌面 ...
- postgre-sql语法
//客户端查询 public void pgsearchclient(HttpContext context, string starttime, string endtime, int page, ...
- sql 简单的定义变量 声明 输出
--定义变量 声明 变量名 数据类型 varchar默认长度为1 --char 当字符不够时 用空格代替 declare @a char(10) --字符串用单引号 set @a ='abcdef' ...
- ubuntu - 14.04,安装JDK1.8(JAVA程序需要的开发、运行环境)
一,如何删除低版本的open JDK? 在ubuntn的软件中心中,如果输入"java",我们会看到open JDK,但是最高版本是1.7,也有1.6版本的,如果我们安装上去,可能 ...
- Python列表知识补充
1.import this Python之禅,圣经. >>> import this The Zen of Python, by Tim Peters Beautiful is b ...
- nginx limit_req限速设置
WIKI: http://wiki.nginx.org/HttpLimitReqModule 漏桶原理(leaky bucket): http://en.wikipedia.org/wiki/Leak ...