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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
python pandas 如何替换某列的一个值
Jun 09 Python
Python实现的建造者模式示例
Aug 06 Python
Python元组知识点总结
Feb 18 Python
django富文本编辑器的实现示例
Apr 10 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
python 批量压缩图片的脚本
Jun 02 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
python中count函数简单用法
2020/01/05 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
怎样声明接口
2014/09/19 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
路政管理专业推荐信
2013/11/11 职场文书
成品仓管员工作职责
2013/12/29 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
Python机器学习之底层实现KNN
2021/06/20 Python
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技