django学习笔记04-Django模型

一、django模型层用于创建和存储数据,模型的基础知识。

  1. 每个模型是python的一个类,继承django.db.models.Model类
  2. 每个模型对应数据库中一张表,模型的每个属性,对应表中的一个字段
  3. django有一套访问数据库的API

二、创建模型

from django.db import models

# Create your models here.
#发布会表
class Event(models.Model):
    name = models.CharField(max_length=100)  #发布会标题
    limit = models.IntegerField()  # 参加发布会人数
    status = models.BooleanField()  # 状态
    address = models.CharField(max_length=200)  # 发布会地址
    start_time = models.DateTimeField('event time')  # 发布会开始时间
    create_time = models.DateTimeField(auto_now=True)  # 发布会创建时间,自动获取

    def __str__(self):
        return self.name

#嘉宾表
class Guest(models.Model):
    # 关联发布会id,models.CASCADE当主表字段被删除时,和它有关的子表字段也会被删除
    event = models.ForeignKey(Event,on_delete=models.CASCADE)
    realname = models.CharField(max_length=64)  # 姓名
    phone = models.CharField(max_length=16)  # 手机号
    email = models.EmailField()  # email
    sign = models.BooleanField()  # 签到状态
    create_time = models.DateTimeField(auto_now=True)  # 创建时间,自动获取

    class Meta:
        unique_together = ("event","phone")

    def __str__(self):
        return self.realname

模型创建成功后,需要在dos命令行执行如下命令完成数据库迁移:

python manage.py makemigrations 应用名
pyhton manage.py migrate

ForeignKey用来创建外键。

Meta是django模型类的内部类,用于定义一些的django模型的行为特性,unique_together用于设置两个字段的联合主键。

__str()__方法考苏python如何将对象已str的方式显示出来。

django模型字段常用类型
类型 说明
AutoFiled 一个IntegerFiled类型的自动增量
BooleanFiled 用于存放布尔类型的数据(true or false)
CharFiled 用于存放字符型数据,需要指定长度max_length
DateFiled 日期类型,必须为“YY-MM-DD”格式
DateTimeFiled 日期时间类型,必须为“YY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]”格式
FloatFiled 用于存放浮点型数据
IntegerFiled 用于存放整型数据,范围-2147483648到2147483647
FilePathFiled 文件路径类型
TextFiled 用于存放文本类型数据

 

 

 

 

 

 

 

 

 

 

 

三、基本数据访问

  1. 插入数据:table.objects.create(),示例如下:
    #Event为表对应的python类,create方法的参数及值为类属性及属性对象的值
    Event.objects.create(name=name,
                                 limit=limit,
                                 status=status,
                                 address=address,
                                 start_time=start_time,
                                 create_time=create_time)

     

  2. 查询数据:table.objects.get(查询条件)精确匹配,返回对象列表。搜索结果为空时,会抛DoesNotExist类型错误。 table.objects.filter(查询条件)模糊匹配,返回对象列表,不存在时,返回空列表。 table.objects.all()用于查询表中的所有数据。示例如下:
    #查找电话为18711111111并且event_id为1的数据
    Guest.objects.get(phone=18711111111, event_id=1)
    #查找电话包含187的数据
    Guest.objects.filter(phone__contains=187)
    #查询表中的所有数据
    Guest.objects.all()

     

  3. 删除数据:table.objects.get(查询条件).delete(查询条件)或table.objects.filter().delete()用于删除查询到的数据。示例如下:
    #删除电话为18711111111并且event_id为1的数据
    Guest.objects.get(phone=18711111111, event_id=1).delete()
    #删除电话包含187的数据
    Guest.objects.filter(phone__contains=187).delete()

     

  4. 更新数据:table.objects.select_for_update().fliter(查询条件).update(更新字段=更新值)用于更新特定条件下的字段。示例如下:
    #将电话包含187且event_id为1的数据的sign字段的值都更新为1
    Guest.objects.filter(phone=187,event_id=1).update(sign="1")

     

你可能感兴趣的:(Python)