定义模型类和数据迁移
定义模型类:
示例:在app中models.py中定义模型类
models.py文件
from django.db import models
# Create your models here.
class Student(models.Model):
sex_choices = (
(0, "女"),
(1, "男"),
(2, "保密")
)
# id=models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True, verbose_name="姓名")
age = models.SmallIntegerField(verbose_name="年龄")
sex = models.SmallIntegerField(choices=sex_choices)
birthday = models.DateField()
class Meta:
db_table = "db_student"
数据库表名:
## 指明数据库表名
db_table
主键:
## django会为表创建自动增长的主键列,每个模型只能有一个主键列
## 如果使用选项设置某个字段的约束属性为主键列(primary_key)后,django不会再创建自动增长的主键列
class Student(models.Model):
# django会自动在创建数据表的时候生成id主键
id = models.AutoField(primary_key=True, null=False, verbose_name="主键") # 设置主键
属性命名限制:
属性名 = models.字段类型(约束选项, verbose_name="注释")
字段类型:
类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 |
BooleanField | 布尔字段,值为True或False |
NullBooleanField | 支持Null、True、False三种值 |
CharField | 字符串,参数max_length表示最大字符个数,对应mysql中的varchar |
TextField | 大文本字段,一般大段文本(超过4000个字符)才使用。 |
IntegerField | 整数 |
DecimalField | 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数,常用于表示分数和价格 Decimal(max_digits=7, decimal_places=2) ==> 99999.99~ 0.00 |
FloatField | 浮点数 |
DateField | 日期 参数auto_now表示每次保存对象时,自动设置该字段为当前时间。 参数auto_now_add表示当对象第一次被创建时自动设置当前。 参数auto_now_add和auto_now是相互排斥的,一起使用会发生错误。 |
TimeField | 时间,参数同DateField |
DateTimeField | 日期时间,参数同DateField |
FileField | 上传文件字段,django在文件字段中内置了文件上传保存类, django可以通过模型的字段存储自动保存上传文件, 但是, 在数据库中本质上保存的仅仅是文件在项目中的存储路径!! |
ImageField | 继承于FileField,对上传的内容进行校验,确保是有效的图片 |
约束选项:
选项 | 说明 |
---|---|
null | 如果为True,表示允许为空,默认值是False。相当于python的None |
blank | 如果为True,则该字段允许为空白,默认值是False。 相当于python的空字符串,“” |
db_column | 字段的名称,如果未指定,则使用属性的名称。 |
db_index | 若值为True, 则在表中会为此字段创建索引,默认值是False。 相当于SQL语句中的key |
default | 默认值,当不填写数据时,使用该选项的值作为数据的默认值。 |
primary_key | 如果为True,则该字段会成为模型的主键,默认值是False,一般不用设置,系统默认设置。 |
unique | 如果为True,则该字段在表中必须有唯一值,默认值是False。相当于SQL语句中的unique |
注意:null是数据库范畴的概念,blank是表单验证范畴的
数据迁移:
在编写完成models.py文件配置后,执行命令
## 在migrations下生成文件,描述了数据表结构的类文件
python manage.py makemigrations
## 同步到数据库中
python manage.py migrate
### 登录数据库进行查询
对数据库表结构进行改变时操作:
models.py文件
from django.db import models
# Create your models here.
class Student(models.Model):
sex_choices = (
(0, "女"),
(1, "男"),
(2, "保密")
)
# id=models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True, verbose_name="姓名")
age = models.SmallIntegerField(verbose_name="年龄")
sex = models.SmallIntegerField(choices=sex_choices)
birthday = models.DateField()
################# 比上方示例新增两行
classmate = models.CharField(db_column="class", max_length=5, db_index=True, verbose_name="班级",default='')
description = models.TextField(default="", verbose_name="个性签名")
#################
class Meta:
db_table = "db_student"
在编写完成models.py文件配置后,执行命令
## 在migrations下生成文件,描述了数据表结构的类文件
python manage.py makemigrations
## 同步到数据库中
python manage.py migrate
### 登录数据库进行查询
图片示例:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了