Django models.py应用实现过程详解
作者:Blue·Sky 发布时间:2021-07-18 11:11:08
编写 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
执行后生成如下文件
# 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
执行该命令后 数据库生成如下数据库表
如上图得到的表名 是以应用名命名的,但是不是我们想要的怎么办了,增加两行代码
如下:
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
查看数据库表得到新建的数据表
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不能创建数据库中的表的问题)
如下图:
解决办法:
第一步:
删除该app名字下的migrations下除__init__.py外的文件。
第二步:
进入数据库,找到django_migrations的表,删除该app名字的所有记录。
第三步:执行下面这两条命令:(在项目目录下)
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)
修改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'
},
}
}
来源:https://www.cnblogs.com/BlueSkyyj/p/10100820.html
猜你喜欢
- 本文实例讲述了python通过加号运算符操作列表的方法。分享给大家供大家参考。具体如下:li = ['a', 'b&
- 线程Threading用于提供线程相关的操作。线程是应用程序中工作的最小单元,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程
- 本文实例讲述了PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法。分享给大家供大家参考,具体如下:前面一篇 PHP递归实现文件夹的复制
- 变量赋值与对象赋值对比<?php // 声明一个变量并赋值 $a = 1; // 将数据类型
- 最近尝试了mysql的最新版本5.5.581.最新发布的mysql 5.5.8没有适合solaris 9的版本;这个在安装时需要注意2.它发
- 上期回顾上一次的图像清晰度评价没有成功,主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解,不同的场景灰度的明暗不同,梯度可能会很大
- 本文实例讲述了PHP基于phpqrcode生成带LOGO图像的二维码。分享给大家供大家参考。具体如下:这里PHP使用phpqrcode生成带
- 偶然看到 Tanel Poder 提到的一个 Metalink Note (438452.1): Performance Tools Qui
- 1、汉语分词的由来使用ASP开发的中小企业的网站,对于站内搜索,往往只是简单的通过SQL语句匹配数据库。对于比较短的词语搜索,这个方法是有效
- 很早之前就在PJ的blog上看到可以用VS2005调试ASP程序,但是没有写出具体的步骤,后来一次偶尔也让我找到了方法,但是一直没把它写出来
- 该语句的作用是:启用或禁用错误处理程序。一般用法如下:On Error Resume NextOn Error GoTo 0如果在您的代码中
- 垃圾评论,垃圾留言,人见人憎,用了验证码,效果也好不到哪里去,还影响用户体验。有的网站甚至不惜牺牲用户体验,而构造强悍的惨不忍睹的超级验证码
- Object 类型的对象虽然有 toString 方法,但结果却是 [Object Object] 让人没法理解的字符。比如简单的对象:{n
- class MyClass(): # 直接将属性定义在类中,这种属性称为 类属性 # 类属性可以通过实列对象和类对象
- ERROR 2003:Can't connect to MySQL server on 'localhost' (1
- defer介绍defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… c
- 词频统计是指在文本中计算每个词出现的次数。在 Python 中,可以使用一些第三方库(如 jieba)来分词,然后使用字典等数据结构记录每个
- 错误提示Invalid byte 1 of 1-byte UTF-8 sequence原因分析在中文版的window下java的默认的编码为
- 不正确地调用Windows应用程序接口可能会产生一些意想不到的副作用,以及潜在地对一个应用程序的代码及数据段的破坏。正确地使用一个空的32位
- 本文是从百度百科中摘录出来的,asp在it中还有Application Service Provider,也就是应用服务供应商的意思。概述A