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显示进度条的方法
Sep 20 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Django和Flask框架优缺点对比
Oct 24 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
python中wheel的用法整理
Jun 15 Python
学python最电脑配置有要求么
Jul 05 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基础学习笔记
2007/03/18 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
浅谈javascript 面向对象编程
2009/10/28 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
详解vue中axios的封装
2018/07/18 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL