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 相关文章推荐
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python实现快速大文件比较代码解析
Sep 04 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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
德劲1103二次变频版的打磨
2021/03/02 无线电
德生BCL3000的电路分析和打磨
2021/03/02 无线电
PHP在Web开发领域的优势
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
PHP PDO操作总结
2014/11/17 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
Element Card 卡片的具体使用
2020/07/26 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
python中函数传参详解
2016/07/03 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
临床医师专业个人自我评价范文
2013/11/07 职场文书
运动会广播稿200字
2014/01/15 职场文书
市场营销策划方案
2014/06/11 职场文书
员工薪酬激励方案
2014/06/13 职场文书
禁止酒驾标语
2014/06/25 职场文书
2014年司法所工作总结
2014/11/22 职场文书
故宫导游词
2015/01/31 职场文书
长江七号观后感
2015/06/11 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis