Django models.py应用实现过程详解


Posted in Python onJuly 29, 2019

编写 models.py 文件

from django.db import models
# Create your models here.
class User_info(models.Model):
 username = models.CharField(max_length=25,verbose_name='用户名')
 password = models.CharField(max_length=25,verbose_name='密码')
 age = models.IntegerField()
 e_mail = models.EmailField()
 create_time = models.DateTimeField()
 update_time = models.DateTimeField()

字段类型

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

1、models.AutoField自增列=int(11)
  如果没有的话,默认会生成一个名称为id的列,如果要显示的定义一个自增列,必须把该列设置为主键(primary_key=True)
2、models.CharField
字符串类型字段 必须加max_length参数
3、models.BooleanField 布尔类型字段=tinyint(1) 不能为空,Blank=True
4、models.ComaSeparatedIntegerField
用逗号分割的数字类型=varchar 继承CharField,所以必须加max_lenght参数
5、models.DateField
日期字段类型date
  参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变
6、models.DateTimeField
日期字段类型datetime 同DateField的参数
7、models.Decimal
十进制小数类型=decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField
字符串类型(正则表达式邮箱)=varchar 对字符串进行正则表达式验证
9、models.FloatField
浮点类型=double
10、models.IntegerField
整形
11、models.BigIntegerField 长整形

integer_field_ranges = {


'SmallIntegerField': (-32768, 32767),


'IntegerField': (-2147483648, 2147483647),


'BigIntegerField': (-9223372036854775808, 9223372036854775807),


'PositiveSmallIntegerField': (0, 32767),


'PositiveIntegerField': (0, 2147483647),

}
12、models.IPAddressField
字符串类型(ip4正则表达式)
13、models.GenericIPAddressField
字符串类型(ip4和ip6是可选的)

参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置进行报错
14、models.NullBooleanField
允许为空的布尔类型
15、models.PositiveIntegerFiel
正Integer
16、models.PositiveSmallIntegerField
正smallInteger
17、models.SlugField
减号、下划线、字母、数字
18、models.SmallIntegerField
数字

数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField
字符串=longtext
20、models.TimeField
时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField
字符串类型,地址正则表达式
22、models.BinaryField 二进制
23、models.ImageField 图片
24、models.FilePathField 文件

执行命令:

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

执行后生成如下文件

Django models.py应用实现过程详解

# Generated by Django 2.1.2 on 2018-12-11 11:39
from django.db import migrations, models
class Migration(migrations.Migration):
 initial = True
 dependencies = [
 ]
 operations = [
  migrations.CreateModel(
   name='User_info',
   fields=[
    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
    ('username', models.CharField(max_length=25, verbose_name='用户名')),
    ('password', models.CharField(max_length=25, verbose_name='密码')),
    ('age', models.IntegerField()),
    ('e_mail', models.EmailField(max_length=254)),
    ('create_time', models.DateTimeField()),
    ('update_time', models.DateTimeField()),
   ],
  ),
 ]

代码如下

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

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

Django models.py应用实现过程详解

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

如下:

from django.db import models
# Create your models here.
from django.db import models
class User_info(models.Model):
 username = models.CharField(max_length=25,verbose_name='用户名')
 password = models.CharField(max_length=25,verbose_name='密码')
 age = models.IntegerField()
 e_mail = models.EmailField()
 create_time = models.DateTimeField()
 update_time = models.DateTimeField()
 class Meta:
  db_table = 'User_info'

修改代码重新执行

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

此时新生成了 一个migrations 文件

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

python manage.py migrate ModelMysql 0002_auto_20181211_1150

Django models.py应用实现过程详解

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

Django models.py应用实现过程详解

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不能创建数据库中的表的问题)

如下图:

Django models.py应用实现过程详解

解决办法:

第一步:

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

第二步:

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

Django models.py应用实现过程详解

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

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)

Django models.py应用实现过程详解

修改options 如下:

# MySQL adil 密码:helloyyj
DATABASES = {
 'default':{
  'ENGINE':'django.db.backends.mysql',
  'HOST':'127.0.0.1',
  'PORT':'3306',
  'NAME':'pyweb', # 数据库名
  'USER':'adil',
  'PASSWORD':'helloyyj',
  'OPTIONS':{
   'sql_mode': 'traditional'
  },
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
python怎么自定义捕获错误
Jun 29 Python
Python常用断言函数实例汇总
Nov 30 Python
Python 实现集合Set的示例
Dec 21 Python
python 制作磁力搜索工具
Mar 04 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 Python
pycharm中显示CSS提示的知识点总结
Jul 29 #Python
pandas 如何分割字符的实现方法
Jul 29 #Python
python自定义时钟类、定时任务类
Feb 22 #Python
python Pandas如何对数据集随机抽样
Jul 29 #Python
python Django 创建应用过程图示详解
Jul 29 #Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 #Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 #Python
You might like
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
PHP 读取和编写 XML
2014/11/19 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
php模板引擎技术简单实现
2016/03/15 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python机器学习之神经网络(三)
2017/12/20 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
详解Python中的测试工具
2019/06/09 Python
Python简易版停车管理系统
2019/08/12 Python
python中wheel的用法整理
2020/06/15 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
保洁主管岗位职责
2013/11/20 职场文书
车间统计员岗位职责
2014/01/05 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
道歉的话怎么说
2015/05/12 职场文书
小学家长意见怎么写
2015/06/03 职场文书
宾馆客房管理制度
2015/08/06 职场文书
Python经常使用的一些内置函数
2022/04/11 Python