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 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python3计算三角形的面积代码
Dec 18 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python实现猜单词小游戏
May 22 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 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
帅气的琦玉老师
2020/03/02 日漫
PHP生成月历代码
2007/06/14 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
PHP7内核之Reference详解
2019/03/14 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
python实现自动重启本程序的方法
2015/07/09 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
python微信公众号开发简单流程
2018/03/23 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
jupyter notebook 多行输出实例
2020/04/09 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
PHP开发工程师面试问题集锦
2012/11/01 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
宣传委员竞选稿
2015/11/19 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Python图片处理之图片裁剪教程
2021/05/27 Python