B django模型系统(后续1)

1.数据库的链接配置

  django里mysql的连接流程

    安装--pip install  pymysql

    创建数据库用户

      有创建数据库的权限的用户

    创建数据库

      crm

    修改配置

       setings

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘crm‘,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘qwe123‘,
        ‘HOST‘:‘127.0.0.1‘,
        ‘PORT‘:‘3306‘,
    }
}

修改项目文件(setings所在的文件夹)下的__init__.py文件

写上

import pymysql
pymysql.install_as_MySQLdb()

2.django的orm系统

https://baike.baidu.com/item/ORM/3583252?fr=aladdin

创建一个在编程文件可用的虚拟数据库or 将代码命令映射成数据库命令

模型类--数据表

类属性----表的字段名

3.模型的创建的和激活

  1模型类必须写在app下的models.py文件中

  2模型要映射到数据库  其所在的app必须要安装

小结:

  每一个模型都是django.db.models.Model的子类

  类变量 表示数据库字段(一列或者一行数据)

  每一个字段有一个字段类的实例表示

from django.db import models

# Create your models here.
class Student_User(models.Model):
    name = models.CharField(max_length=30) #字符串
    age =models.SmallIntegerField(default=18) #数字 默认值
    sex= models.SmallIntegerField(default=1)
    qq=models.CharField(max_length=20,default=‘‘)#字符串比int好操作
    phone=models.CharField(max_length=20,default=‘‘)
    c_time=models.DateTimeField(verbose_name=‘创建时间‘,auto_now_add=True) #提示给人看的
    ##auto_now_add=True #自动添加不用特地写
    ##
    对应sql语句
    --
    -- Create model Student_User
    --
    CREATE TABLE `video_student_user` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(30) NOT NULL,
    `age` smallint NOT NULL,
    `sex` smallint NOT NULL,
    `qq` varchar(20) NOT NULL,
    `phone` varchar(20) NOT NULL,
    `c_time` datetime(6) NOT NULL);
    COMMIT;

模型应用三步

  1配置

    数据库要先建立

    app要注册

  2建立模型                                                  

  3运行数据库迁移命令(在项目根目录下)

     1.python manage.py makemigrations appname

      告诉django我们做了哪些数据库更改 并希望时装

      目前只是做一个记录 还没touch数据库

      i.可以运行 python manage.py sqlmigrate appname 从迁移获取sql语句

    2.运行 python manage.py migrate appname  完成迁移

4.数据的增删改查

-工具 django shell 调试工具

  命令 python manage.py shell 进入调试工具

  导入

In [1]: from video.models import Student_User                                              

In [2]: Student_User.objects
Out[2]: <django.db.models.manager.Manager at 0x7fe4f810fcc0>

In [3]: Student_User.objects.all()
Out[3]: <QuerySet []>

-增加

  1.实例然后保存

In [4]: s1=Student_User(name=‘ziyu‘,age=‘20‘,qq=‘123456‘)

In [5]: s1.save

  2.实例增加然后保存

In [8]: s2 =Student_User()

In [9]: s2.name= ‘zy‘

In [10]: s2.age= 18

In [11]: s2.save()

  3.直接创建

in[13]:Student_User.objects.create(name=‘aa‘,age=‘23‘)

  4.查找或创建

In [5]: s=Student_User.objects.get_or_create(name=‘zy‘)

In [6]: s

Out[6]: (<Student_User: zy-18>, False)  False 代表是否有过创建

显示

在models的文件下面定义如下代码来修改 class.objecti.all()方法的输出结果

def __str__(self):
    return ‘%s-%s‘%(self.name,self.age)

-查找

  1.查找全部

res= Student_User.objects.all()  # #res等于这条语句对应的sql语句并非等于这个运行结果 print(res.query)查看对应的sql语句 (res可以for循环可以迭代可以切片)

  2.查找一条

Student_User.objects.get(name=‘zy‘) 当有多条符合条件时报错(常常与pk代表主键这里是id连用)  Student_User.objects.get(pk=2)

  3.条件过滤(返回查询集)

res= Student_User.objects.filter(‘sex‘=1)

-修改

1.

  首先查到相应的数据

  然后直接赋值

  在保存

2.update(批量修改0

  例

  Student_User.object.filter(name=‘ziyu‘).update(age=‘20‘)

  不能与get连用可以与all连用

-删除  (同update)

  先get

  然后 .delete

5.数据库的调用

from appname.models import classname
【变量name】= classname.objects.all()

模型的调用

--常用字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types

--常用字段类型的对应

  • int --IntegetField
  • varchar -- CharField
  • longtext --TextField
  • date -- DateField
  • datetime --DateTimeField

--常用参数

https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options

primary_key:  指定是否为主键。

自定义主键的创建:AutoField(primary_key=ture)

unique:  指定是否唯一。

null:  指定是否为空,默认为False。

blank: 等于True时form表单验证时可以为空,默认为False。

default:  设置默认值。

DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。

DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

--常用查询方法

通过模型类上的管理器来构造Queryset

-模型类上的管理器是指  .object

-Queryset 表示数据库中对象的集合。

·-等同于select语句。惰性的

all()获取所有记录(返回queryset)(queryset.query == mysql语句)

first()返回第一条记录(返回一个数据对象)

last()返回最后一条记录(...)

  first()和last()-引出排序规则---默认通过主键。可以通过_meta设置

get(**kwargs)根据给定的条件获取一个对象,有对个符合条件的结果时报错

filter(**kwargs)根据给定的条件获取一个过滤后的queryset,多个条件逗号隔开。效果为and

exclude(**kwargs)(用法和filter相同结果相反)返回所有条件外的

or 多条件查询:使用Q对象(例 filter(Q(age=0)|Q(age=1)))

  需要导入from django.db.models import Q

values(*fields):返回相应字段返回一个queryset,返回一个字典列表。(fields:某字段)返回结果任然可以过滤

only(*fields):返回queryset,对象列表,(注意only一定会包含主键字段)

  对比value  对了一个key。返回结果不同。一般only比较高效。

defer(*fields)返回queryset,用法与only相同作用与only相反

order_by(*fields)根据给定的字段来来排序在字段名前加-反向排序例‘-name’

  考虑排序规则(尤其是在对中文排序时)

  多字段排序:(‘1字段’,‘2字段’)则先按‘1字段排序’在按‘2字段’排序

切片返回的多给对象都可以用列表的切片语法进行切片

  对应mysql里的LIMIT和OFFSET

  支持步长但是结果返回成列表(全部拿出来之后在切片不是在取值的时候切)效率不高

  不支持负索引

  ****注意 切完片之后不在支持,附加条件与排序

--常用查询条件(以双下划线来调用)

exact 准确匹配  使用:在字段后加‘__exact‘ 例:(get(id__exact=14))

iexact 不分大小写 匹配  对应 mysql语法 LIKE(模糊匹配)使用:__

contains 包涵   也是对应 LIKE BINARY %name%  例:(filter(name__contains=‘name‘))

icontains 不分大小写包涵  LIKE %name%

in 在一定范围内的条件下检索 例:(filter(name__in=[‘name‘,‘name1‘,‘name2‘]))

range   数字版 的 in 例:(filter(name__range=(18,20))

gt  大于  例:((filter(id__gt=18))大于18的id

gte 大于等于

lt 小于

lte小于等于

startswith 以任意字符开头 对应 LIKE BINARY name% 例:filter(name__startswith=‘n‘)以n开头的name

istartswith 大小写不敏感

endswith

iendswith

isnull   返回 True False  对应 SQUry 里IS NULL IS NOT NULL例:res.filter(age__isnull=False) 不为空则返回

  注释:res= tablename.objetct.all()

Lower() :例: order_by(Lower(‘name‘))

  导入 from django.db.models.function

   这时候order的反向方法不在适用应用order_by(Lower(‘name‘)).desc()

    对应mysql里的DESC

--聚合

导入: from django.db.models import Count,Avg.Max,Sum,Count

然后通过 queryset的aggregate的方法

  • count  :计数  例子 res.filter(age__isnull=False) .count()
  • 平均值 :res.aggregate(age_avg=Avg(‘age‘))
  • 极值:res.aggregate(age_max=Max(‘age‘))   (等号前的是自定义的名字)

--分组,聚合

  • annoate(num=Count(‘sex‘))
  • 例子:
In [10]: ress=Student_User.objects.values(‘sex‘).annotate(num=Count(‘sex‘))
In [11]: ress
Out[11]: <QuerySet [{‘sex‘: 1, ‘num‘: 5}]>

原文地址:https://www.cnblogs.com/zy0307/p/10540050.html

时间: 2024-11-06 03:55:45

B django模型系统(后续1)的相关文章

Django模型系统(一)

装饰器补充 django模型系统 一,数据库的链接配置 二,Django的ORM简介 三,模型的创建与激活 四,数据的增删改查 一,数据库的链接配置 django  链接mysql的配置流程: -安装pymysql --   pip  install  pymysql -创建数据库用户 -有创建数据库权限的用户 -创建数据库 create database mysite; (创建需要的数据库) -修改配置 -修改项目文件(和settings.py文件所在的目录)下 __init__.py文件 -

django模型系统(二)

django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围(filter). QuerySet等同与select语句,过滤器等同于一个限制字句,比如where.limit 使用.query可查看对应的SQL语句 all()获取所有 name.objects.all()queryset 获取第一条 name.objects.first()返回的是对象 获取最后

django模型系统二

常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. QuerySet等同于select语句,过滤器是一个限制子句,比如where,limit. all() 获取所有 Student.objects.all() #返回的是queryset 获取第一条 Student.objects.first() #返回的是对象 获取最后一条 Student.obj

Django 模型系统(model)&amp;ORM--进阶

QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all()[:5] # (LIMIT 5) >>> Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) 不支持负的索引(例如Entry.objects.all()[-1]).通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询. 可迭代 articleL

08 django模型系统(一)

课前补充:1.虚拟环境的账号不要用root账号链接虚拟机 1.数据库的连接配置django 连接mysql的配置流程: - 进入虚拟环境,安装mysql pymysql pip install pymysql - 创建数据库用户 有创建数据库权限的用户 例如:创建一个管理员用户crm账号,密码为crm@python CREATE USER 'crm'@'%'IDENTIFIED BY 'crm@python'; 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作. GR

Django 模型系统(model)&amp;ORM--基础

ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系

django模型系统(三)--多对多,一对一以及跨表查询

-Many-to-Many*** 指定了中间表,add,remove,set 都不能用,必须用中间表 两端都可以自动获得另一端的自动API访问.跟一对多的反向访问类似.但是使用的是本字段的字段名 In [112]: Course.objects.create(name='python全栈') Out[112]: <Course: python全栈> In [113]: Course.objects.create(name='python全套') Out[113]: <Course: py

Django模型

数据库表的设计 设计系统表 Django提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库操作. Django模型基础知识:每个模型是一个Python类,继承django.db.models.model类.该模型的每个属性表示一个数据库表字段.所有这一切,已经给你一个自动生成的数据库访问的API. 1.打开.../sign/models.py文件,完成表的创建 from django.db import models # Create your models here.

django认证系统

Django认证系统同时处理认证和授权.简单地讲,认证验证一个用户是否它们声称的那个人,授权决定一个通过了认证的用户被允许做什么.这里的词语"认证"同时指代这两项任务. 认证系统包含: 用户 权限:二元(是/否)标志指示一个用户是否可以做一个特定的任务. 组:对多个用户运用标签和权限的一种通用的方式. 一个可配置的密码哈希系统 用于登录用户或限制内容的表单和视图 一个可插拔的后台系统 使用: 位于django.contrib.auth,配置在settings.py中的 INSTALLE