Django模块学习[4] Model介绍,ORM,字段类型,约束1

建立新项目

建立项目DJ

建立新应用App

记得注册

切换mysql

setting注册

伪装pymsql

迁移文件

结果如下

MODEL(模型)

企业开发中,通常是从数据开始开发的,不像之前直接从路由学起。
Django对各种数据库都提供了很好的支持,对不同的数据库,Django提供了统一调用的API,我们可以根据不同的业务需求使用不同的数据库。

  • 配置数据库:pip install pymysql
  • 在工程目录下的__init__.py中输入

import pymysql 

pymysql.install_as_MySQLdb()
  • 完成数据库驱动加载

SETTINGS.PY


'ENGINE':'django.db.backends.mysql'

'NAME':'数据库名'

'USER':'root'

'PASSWORD':'密码'

'HOST':'LOCALHOST',#连远端需要修改

'PORT':'3306',

开发流程

1.配置数据库
2.定义模型类(一个模型类对应一个数据库表,一个字段是一列)
3.生成迁移文件
4.执行迁移生成数据表
5.使用模型类进行增删改查操作

ORM

ORM(OBJECT RELATIONAL MAPPING)对象关系映射,是一种程序技术,用于实现面向对象编程语言里不用类型系统的数据之间的转换,可以简单理解为翻译机。
核心特点是:解耦合   将业务逻辑和sql解耦(sql本身也是编程语言)

Django模型定义

重要概念:模型,表,属性,字段
一个模型映射一张表,一个属性映射表中的列

定义属性(坑)

见定义属性文件

数据库中数据类型:

  • 字符串
  • 数字
  • 时间

数据类型影响的是内存分配:例如布尔值1bit,一个字符串32bit

null 和 blank区别:null代表NONE表示什么都没有,而BLANK表示''即引号内为空

索引应用在:

  • 建立在外键上,滥用索引反而会降低查询速度
  • 经常查询的字段上

unique用在唯一约束,例如电话号码,用户名这种不允许约束的情况上

创建模型类

元信息

俗名类中类,通过类设置子类,再设置属性
元选项,再模型类中定义Meta,用于设置元信息:


class Meta:

    db_table = xxx #定于数据表名,推荐使用小写字母

    ordering=[]

    对象的默认排序字段,获取对象列表时使用,通常是Integer类形,升序ordering['id'],降序ordering['-id']

在App.models中设置模型:


from django.db import models

# Create your models here.

class Person(models.Model):

    p_name=models.CharField(max_length=16,unique=True)#用户名不允许重复,所以使用约束unique

    p_age = models.IntegerField(default=18,db_column='age')

    #False为男,True为女,db_clomn是设置映射后的数据库列名,默认列名为前面的属性名p_sex

    p_sex = models.NullBooleanField(default=False,db_column='sex')

    #修改表名,如果不设置Meta原表名为App_Person

    class Meta:

        db_table = 'People'

然后迁移数据makemigrations,注意:必须要提前注册App至settings.py中
查看表:

表名,列名都修改完成
但是default约束是放在操作中完成的,并没有放在建表语句中

模型成员objexts

Django默认通过模型的objexts对象实现模型数据查询
all()所有,get(条件)指定一个(不常用,因为我们通常查询数据需要筛选条件)
Django有两种过滤器用于筛选记录

  • filter:返回符合筛选条件的数据集
  • exclede:返回不符合筛选条件的数据集

多个filter和exclude可以连接在一起查询

模型过滤

filter,exclude连续使用

  • 链式调用,ruperson.objects.filter().filter().xxx.exclude().yyyy

为了实践我们用代码添加一些数据进去
首先添加一个App子路由,记得先注册:
总路由:


from django.contrib import admin

from django.urls import path, include

urlpatterns = [

    path('admin/', admin.site.urls),

    path('App',include('App.urls')),

]

app子路由:


from django.conf.urls import url

from App import views

urlpatterns=[

    url('addpersons/',views.add_persons),

]

views:


from App.models import Person

import random

def add_persons(request):

    for i in range(15):

        person = Person()

        flag = random.randrange(100)

        person.p_name = 'tom%d' % flag

        person.p_age = flag

        person.p_sex = flag % 2

        person.save()

    return HttpResponse('批量创建成功')

运行访问:

报错原因是随机到了名字重复,因为之前约束了unique
将views中第8行改为


 person.p_name = 'tom%d' % i

修改完之后成功

Last modification:October 9, 2021
如果觉得我的文章对你有用,可以打赏一瓶汽水钱嗷~