笔记整理:Django创建数据模型

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表示每次修改记录时,把当前时间存储到该字段

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值