Django创建数据模型
Django中的模型是用来定义数据结构的类,并提供数据库表管理机制,主要用来定义字段的名称、类型、字段最大值、默认值、约束条件等。简单的说就是,当你在Django的模型中创建一个类时,Django所连接的数据库就会创建一个表,表的字段就是你所创建的类的属性,字段的约束条件等信息就是创建类属性时所设置的参数。
连接数据库
Django可以成为面向数据的开发框架,用命令生成项目与应用程序后,项目根目录下会生成一个默认的数据库db.sqlite3。如果我们向要使用其他的数据库,就需要在setting.py文件中修改数据库的默认连接。打开setting.py文件,将字典DATABASES信息修改如下:
DATABASES = {
"default":{
"ENGINE":"django.db.backends.mysql", # 数据库引擎,指明数据库类型
"HOST":"127.0.0.1",
"PORT":"3306",
"NAME":"mytest", # 数据库名称,库需要自己手动创建
"USER":"root",
"PASSWORD":"root"
}
}
注:Djano可以生成数据库表,但是不能生成数据库,所以生成数据库需要用到数据库原生命令手动创建
创建数据模型
编辑数据表 打开应用程序目录下的models.py文件,在这里创建的每一个类都将生成一个数据表
from django.db import models
#定义一个员工数据模型,所有数据模型都必须继承于models.Model
class Employee(models.Model):
#定义name字段,类型为字符串,最大长度为32,字段显示名称为“姓名”
name = models.CharField(max_length=32,verbose_name="姓名")
#定义email字段,类型为邮箱,字段显示名称为“邮箱”
email = models.EmailField(verbose_name="邮箱")
注册应用程序 models.py中有了代码,它所属的应用程序必须在settings.py的INSTALLED_APPS中注册,直接将应用程序名添加到INSTALLED_APPS列表中即可。例如我所创建的应用程序名为myapp:
INSTALLED_APPS = [
...
"myapp",
]
指明以pymysql模块代替MySQLdb模块 在项目目录下的_init__.py中编写代码:
import pymysql
pymysql.install_as_MySQLdb()
生成数据表 终端进入项目根目录,运行命令:
python manage.py makemigrations
python manage.py migrate
执行完毕后,就会在mysql的mytest库中生成一个应用名+下划线+小写数据类名组成的表名,表的结构中除了数据类每个属性所对应的字段外,还有一个自动增长的id字段。例如我的应用名叫myapp,数据类名叫Employee,那么对应的表名就叫myapp_employee。另外,在mytest库下还会同时生成其他以auth_ 和django_ 开头的数据表,这都是Django自动生成的系统表,后台管理系统会用到这些表。
常见字段类型
CharField 字符类型,必须提供max_length参数,max_length表示字符长度
from django.db import models
class Employee(models.Model):
name = models.CharField(max_length=32)
EmailField 邮箱类型,实际上是字符串,只是提供了邮箱格式检验
email = models.EmailField()
TextField 文本类型,存储大段文本字符串。字符串长度如果超过254个字符建议使用TextField
descript = models.TextField()
IntegerField 整数类型
integer = models.IntegerField()
DateField 日期类型
date = models.DateField(auto_now=True,auto_now_add=False)
auto_now参数自动保存当前时间,一般用来表示最后修改时间。在第一次创建记录的时候,Django将auto_now_add字段值自动设置成为当前时间,用来表示记录对象的创建时间
TimeField 时间字段
time = models.TimeField(auto_now=False,auto_now_add=False)
DateTimeField 日期时间字段
datetime = models.DateTimeField(auto_now=False,auto_now_add=False)
FileField 实际上是字符串类型,用来把上传的文件路径保存在数据库中。文件上传到指定目录,主要参数upload_to指明上传文件的保存路径,这个路径与Django配置文件的MEDIA_ROOT变量有关
filetest = models.FileField(upload_to="test/")
例如在setting.py文件中MEDIA_ROOT = os.path.join(BASE_DIR,“upload/”),现在数据表中filetest的值是test.txt,那么文件路径就是项目根目录/upload/test/test.txt
ImageField 实际上是字符串,用来把上传的图片的路径保存在数据库中,参数同FileField
picture = models.ImageField(upload_to="pic/")
常见字段属性
db_index db_index=True表示将此字段设置为索引
title = models.CharField(max_length=32,db_index=True)
unique unique=True表示该字段在表中不能有重复值
default 设置默认值,如defualt=“good”
auto_now_add DateField、TimeField、DateTimeField这3中字段所独有的属性,auto_now_add=True表示把新建该记录的时间保存为该字段的值
auto_now DateField、TimeField、DateTimeField这3中字段所独有的属性,auto_now=True表示每次修改记录时,把当前时间存储到该字段