Django - models.py 应用

编写 models.py 文件

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class User_info(models.Model):
  6.  
  7. username = models.CharField(max_length=25,verbose_name='用户名')
  8. password = models.CharField(max_length=25,verbose_name='密码')
  9. age = models.IntegerField()
  10. e_mail = models.EmailField()
  11. create_time = models.DateTimeField()
  12. update_time = models.DateTimeField()

字段类型

一般数据库中字段类型大概5种(字符串/数字/浮点型/时间类型/布尔类型),但Django为了在后台admin中可以操作数据库,同时为了限制在admin中对数据库的无效操作,Model中设置了很多种数据类型。

  1. 1models.AutoField  自增列=int(11)
  2.   如果没有的话,默认会生成一个名称为id的列,如果要显示的定义一个自增列,必须把该列设置为主键(primary_key=True)
  3. 2models.CharField  字符串类型字段 必须加max_length参数
  4. 3models.BooleanField 布尔类型字段=tinyint(1) 不能为空,Blank=True
  5. 4models.ComaSeparatedIntegerField  用逗号分割的数字类型=varchar 继承CharField,所以必须加max_lenght参数
  6. 5models.DateField  日期字段类型date
  7.   参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变
  8. 6models.DateTimeField  日期字段类型datetime DateField的参数
  9. 7models.Decimal  十进制小数类型=decimal
  10.   必须指定整数位max_digits和小数位decimal_places
  11. 8models.EmailField  字符串类型(正则表达式邮箱)=varchar 对字符串进行正则表达式验证
  12. 9models.FloatField  浮点类型=double
  13. 10models.IntegerField  整形
  14. 11models.BigIntegerField 长整形
  15.   integer_field_ranges = {
  16.     'SmallIntegerField': (-32768, 32767),
  17.     'IntegerField': (-2147483648, 2147483647),
  18.     'BigIntegerField': (-9223372036854775808, 9223372036854775807),
  19.     'PositiveSmallIntegerField': (0, 32767),
  20.     'PositiveIntegerField': (0, 2147483647),
  21.   }
  22. 12models.IPAddressField  字符串类型(ip4正则表达式)
  23. 13models.GenericIPAddressField  字符串类型(ip4ip6是可选的)
  24.   参数protocol可以是:bothipv4ipv6 验证时,会根据设置进行报错
  25. 14models.NullBooleanField  允许为空的布尔类型
  26. 15models.PositiveIntegerFiel  正Integer
  27. 16models.PositiveSmallIntegerField  正smallInteger
  28. 17models.SlugField  减号、下划线、字母、数字
  29. 18models.SmallIntegerField  数字
  30.   数据库中的字段有:tinyintsmallintintbigint
  31. 19models.TextField  字符串=longtext
  32. 20models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
  33. 21models.URLField  字符串类型,地址正则表达式
  34. 22models.BinaryField 二进制
  35. 23models.ImageField 图片
  36. 24models.FilePathField 文件

执行命令:

  1. # 执行以下命令,记录我们对models.py的所有改动
  2. python manage.py makemigrations

执行后生成如下文件

  1. # Generated by Django 2.1.2 on 2018-12-11 11:39
  2.  
  3. from django.db import migrations, models
  4.  
  5. class Migration(migrations.Migration):
  6.  
  7. initial = True
  8.  
  9. dependencies = [
  10. ]
  11.  
  12. operations = [
  13. migrations.CreateModel(
  14. name='User_info',
  15. fields=[
  16. ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  17. ('username', models.CharField(max_length=25, verbose_name='用户名')),
  18. ('password', models.CharField(max_length=25, verbose_name='密码')),
  19. ('age', models.IntegerField()),
  20. ('e_mail', models.EmailField(max_length=254)),
  21. ('create_time', models.DateTimeField()),
  22. ('update_time', models.DateTimeField()),
  23. ],
  24. ),
  25. ]

代码如下

  1. #如下 这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性
  2. python manage.py migrate

执行该命令后 数据库生成如下数据库表

如上图得到的表名 是以应用名命名的,但是不是我们想要的怎么办了,增加两行代码

如下:

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. from django.db import models
  5.  
  6. class User_info(models.Model):
  7.  
  8. username = models.CharField(max_length=25,verbose_name='用户名')
  9. password = models.CharField(max_length=25,verbose_name='密码')
  10. age = models.IntegerField()
  11. e_mail = models.EmailField()
  12. create_time = models.DateTimeField()
  13. update_time = models.DateTimeField()
  14.  
  15. class Meta:
  16. db_table = 'User_info'

修改代码重新执行

  1. # 执行以下命令,记录我们对models.py的所有改动
  2. python manage.py makemigrations

此时新生成了 一个migrations 文件

此时可以针对 新的文件进行执行

  1. python manage.py migrate ModelMysql 0002_auto_20181211_1150

查看数据库表得到新建的数据表

python manage.py makemigrations这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件,如果你接下来还要进行改动的话可能生成就是另外一个文件不一定都是0001文件,但是这个命令并没有作用到数据库,这个刚刚我们在上面的操作过程之后已经看到了,而当我们执行python manage.py migrate 命令时  这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性

另外一个需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话  则执行如下命令:

python manage.py makemigrations appname,

python manage.py migrate appname,

如果要想精确到某一个迁移文件则可以使用:

python manage.py migrate appname 文件名

遇到问题:

1、No migrations to apply(django不能创建数据库中的表的问题)

如下图:

解决办法:

第一步:

删除该app名字下的migrations下除__init__.py外的文件。

第二步:

进入数据库,找到django_migrations的表,删除该app名字的所有记录。

第三步:执行下面这两条命令:(在项目目录下)

python manage.py makemigrations

python manage.py migrate

原因:

django_migrations表记录着数据库的对应表的修改记录。

每次修改后,都执行第三步的命令,然后在第一步的文件夹下生成修改的文件,django_migrations表记录修改的变更过程。

2、

Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.")
result = self._query(query)

修改options 如下:

  1. # MySQL adil 密码:helloyyj
  2. DATABASES = {
  3. 'default':{
  4. 'ENGINE':'django.db.backends.mysql',
  5. 'HOST':'127.0.0.1',
  6. 'PORT':'',
  7. 'NAME':'pyweb', # 数据库名
  8. 'USER':'adil',
  9. 'PASSWORD':'helloyyj',
  10. 'OPTIONS':{
  11. 'sql_mode': 'traditional'
  12. },
  13. }
  14. }

3、No changes detected

执行命令 python manage.py makemigrations  提示如下
No changes detected

解决办法:修改命令

python manage.py makemigrations --empty defuse   ‘defuse’  为我的应用名

提示:

App 'defuse' could not be found. Is it in INSTALLED_APPS?  原来是没有在setting.py 添加应用,添加后即可成功。

Django - models.py 应用的更多相关文章

  1. django models.py增加后MySQL数据库中并没有生成相应的表

    根据教程到添加并保存quest的时候报错了 1.models.py里面的命名没有错 2.查看mysite->settiongs下的INSTALLED_APPS设置正确 3.使用python ma ...

  2. Django models.py创建数据库

    创建完后初始化数据库 在命令行里输入: 回车后出现 继续命令行输入:

  3. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

  4. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  5. 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

    第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...

  6. 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表

    第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...

  7. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

  8. Django框架----models.py(数据库操作文件)

    利用一个中间模块 帮助我们连接数据库,写SQL语句,执行SQL语句,拿到结果 models.py 一.数据的对应关系 1. 类 ---> 表 2. 对象 ---> 数据行 3. 属性 -- ...

  9. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

随机推荐

  1. Mybatis的Mapper接口方法不能重载

    今天给项目的数据字典查询添加通用方法,发现里边已经有了一个查询所有数据字典的方法 List<Dict> selectDictList(); 但我想设置的方法是根据数据字典的code查询出所 ...

  2. linux普通用户提权

    tar通配符注入. echo 'echo "chenglee ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > demo.sh e ...

  3. 20145326蔡馨熤《网络对抗》——MSF基础应用

    20145326蔡馨熤<网络对抗>——MSF基础应用 实验后回答问题 用自己的话解释什么是exploit,payload,encode. exploit:起运输的作用,将数据传输到对方主机 ...

  4. C语言动态链表数据结构

    链表的操作增删改查 typedef int DATA; struct SNode { DATA data; SNode* pNext; }; SNode* g_head=NULL;//全局变量 //从 ...

  5. 【转】RHEL(RedHat Enterprise Linux)5/6 ISO镜像下载

    本文贴出了RHEL(RedHat Enterprise Linux)发行版本中常用的服务器版本的ISO镜像文件,供大家下载学习使用,贴出的版本有RedHat Enterprise Linux(RHEL ...

  6. Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details.

    [root@web01 ~]#  systemctl start php-fpm Job for php-fpm.service failed because the control process ...

  7. gcc,g++

    什么是gcc / g++ 首先说明:gcc 和 GCC 是两个不同的东西 GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C.C++.JAV.Fortran.P ...

  8. uniGUI试用笔记(八)

    在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...

  9. bzoj 3437 小p的农场

    bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...

  10. Newcoder 华华给月月出题(线筛)题解

    题目描述: 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: Ans=⊕Ni=1(iNmod(109+7))Ans=⊕i=1N(iNmod(109+7)) ⊕⊕符 ...