zoukankan      html  css  js  c++  java
  • ORM对象关系型映射的用法

    ORM对象关系型映射的用法 -- Django模型

    1.什么是ORM关系型映射

    ORM 全拼Object-Relation Mapping.
    中文意为 对象-关系映射.
    主要实现模型对象到关系数据库数据的映射.

    2.Django数据类型

    类型 说明
    AutoField 用于存放integer类型的数字
    BooleanField 用于存放布尔类型的数据(Ture或False)
    CharField 用于存放字符型的数据,需要指定长度max_length
    CommaSeparatedIntegerField 用于存放用逗号隔开的 integer 类型的数据
    DateField 日期型,必须是“YYYY-MM-DD”格式
    DateTimeField 日期时间型,必须是"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] "格式。
    DecimalField 小数型,用于存放小数的数字。
    EmailField 电子邮件类型
    FilePathField 文件路径类类型,FilePathFields must have either 'allow_files' or 'allow_folders' set to True.
    FloatField 浮点型。用于存放浮点型数据。
    IntegerField 用于存放 integer 类型的数字。
    BigIntegerField 用于存放大 integer 类型的数字,最大数支持:9223372036854775807
    GenericIPAddressField 存放 IP 地址的类型,IPv4 和 IPv6 地址,字符串格式。
    NullBooleanField vlaue must be either None, True or False.
    PositiveSmallIntegerField Positive small integer
    SlugField 需要定义 max_length 值。
    SmallIntegerField Small integer
    TextField 用于存放文本类型的数据。
    TimeField 时间类型。"HH:MM[:ss[.uuuuuu]]" 格式
    URLField 用于存放 URL 地址
    BinaryField Raw binary data

    3.Django模型中设计系统表

    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("状态",default=True) #活动开始状态
        address = models.CharField("地址",max_length=100) #地址
        start_time = models.DateTimeField("时间") #活动开始时间
        create_time = models.DateTimeField(auto_now_add=True) #创建时间
    
        def __str__(self):
            return self.name
    
    
    class Guest(models.Model):
        """嘉宾表"""
    
        event = models.ForeignKey(Event,on_delete=models.Case) #嘉宾与活动关联
        real_name = models.CharField("姓名",max_length=64) #真实姓名
        phone = models.CharField("手机号",max_length=16) #手机号
        email = models.EmailField("邮箱") #邮箱
        sign = models.BooleanField("签到") #签到
        create_time = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.real_name
    

    4.迁移数据库

    > python manage.py makemigrations
    > python manage.py migrate
    > 注册后台admin用户
    > python manage.py createsuperuser
    

    5.admin后台管理/自定义后台

    #在admin.py中完成模型的注册
    
    from django.contrib import admin
    from model_app.models import Event,Guest
    # Register your models here.
    
    class EventAdmin(admin.ModelAdmin):
        """显示出Event数据的字段"""
        list_display = ['name','limit','status','address','start_time']
    
    class GuestAdmin(admin.ModelAdmin):
        """显示出Guest数据的字段"""
        list_display = ['real_name','phone','email','sign']
    
    admin.site.register(Event,EventAdmin)
    admin.site.register(Guest,GuestAdmin)
    
    

    6.ORM基本数据访问

    D:pydjguest> python3 manage.py shell 模式下进行

    6.1 查询数据
    • 根据主键查询数据

    e1 = Event.objects.get()

    有局限性:

    1.数据库中存在多个数据时,会报错
    2.数据库中不存在时数据时,会报错

    用法: 用户根据主键查询
    e1 = Event.objects.get(id=1)

    • 类似where查询

    e1 = Event.objects.filter()

    • 模糊查询

    e1 = Event.objects.filter(name__contains="python")

    6.2 插入数据

    • 方式一

    e1 = Event(id=2,name='朋友',limit=2000,status=True,address='北京水立方',start_time=datetime(2016,8,10,14,0,0))
    e1.save

    • 方式二

    Event.objects.create(id=2,name='朋友',limit=2000,status=True,address='北京水立方',start_time=datetime(2016,8,10,14,0,0))

    6.3 删除数据

    • 先查出数据,后删除

    e1 = Event.objects.get(id=1)
    e1.delete()
    或者 Event.objects.get(id=1).delete()

    6.4 更新数据

    • 方式一 查询出数据,后根据字段进行更新 例如:查询phone='13611001101' 的嘉宾,更新 realname='andy2''

    e1 = Event.objects.get(phone='13611001101')
    e1.realname = 'andy2'
    e1.save()

    • 方法二

    Event.objects.select_for_update().filter(phone='13611001101').update(realname='andy')

  • 相关阅读:
    StarUML 破解方法
    String、StringBuilder、StringBuffer对比
    ThreadLocal源码
    编程思想——访问权限控制
    设计模式——调停者模式
    Abp.vNext 权限备注
    Abp 中 模块 加载及类型自动注入 源码学习笔记
    使用 ZipArchive 生成Zip文件备注
    ORACLE 连接SQLSERVER 数据库备忘
    FastReport 自定义数据集
  • 原文地址:https://www.cnblogs.com/yangsun/p/10225529.html
Copyright © 2011-2022 走看看