美文网首页
Django(六)模型与数据库

Django(六)模型与数据库

作者: 虐心笔记 | 来源:发表于2019-08-15 21:14 被阅读0次

    Django对各种数据库提供了很好的支持,而且为很多数据库提供了统一的调用API,这些API统称为ORM框架。通过使用Django内置的ORM降价可以实现数据库操作。ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。从效果上说,其实是创建了一个可在编程语言中 使用的“虚拟对象数据库”,通过对虚拟对象数据库操作从而实现对膜表数据库的操作。两者是相互对象,虚拟对象数据库也称模型。

构建模型

    具体实现操作过程:

    1.配置目标书库信息,主要在settings.py设置数据库信息,具体操作查看:配置信息

    2.构建虚拟对象数据库,在APP的models.py文件中一类的形式定义模型。

    3.通过模型在目标数据库中创建相应的数据表。

    4.在视图函数中通过对模型操作实现目标数据库的读写操作。


在项目index的models.py文件中定义模型,代码如下:

from django.db import models

# Create your models here.

# 创建产品分类表

class Type(models.Model):

    id = models.AutoField(primary_key=True)

    type_name = models.CharField(max_length=20)

# 创建产品信息表

lass Product(models.Model):

    id = models.AutoField(primary_key=True)

    name = models.CharField(max_length=50)

    weight = models.CharField(max_length=20)

    size = models.CharField(max_length=20)

    type = models.ForeignKey(Type, on_delete=models.CASCADE)

上述代码分别定义了模型Type和Product:

    1.模型以类的形式进行定义,并且继承Django的models.Model类,一个类代表目标数据库的一张表。

    2.模型的字段以类属性进行定义,如id = models.IntegerField(primary_key=True)代表在数据表Type中命名一个名为id的字段,该字段的数据类型为整型并设置为主键。

完成模型的定义后,接着在目标书库中穿件相应的数据表,在目标数据库中的创建表是通过Django的管理工具manage.py完成。创建数据表需要执行两次指令,分别是:

E:\Mydjango> python manage.py makemigrations

E:\Mydjango> python manage.py  migrate

makemigrations指令用于将index所定义的模型生成0001initial.py文件,改文件存放在index的migrations文件夹。0001_initial.py文件将models.py的内容生成数据表的脚本代码,migrate指令是根据脚本代码在目标数据库中生成相对应的书库表。


数据库表关系

    一个模型对应目标数据库的一个数据表,每个数据表之间是可以存在关联。表与表之间有三种关系:一对一,一对多,多对多。

# # 一对多关系#

class Performer(models.Model):

    id = models.IntegerField(primary_key=True)

    name = models.CharField(max_length=20)

    nationality = models.CharField(max_length=20)

class Program(models.Model):

    id = models.IntegerField(primary_key=True)

    performer = models.ForeignKey(Performer,on_delete=models.CASCADE)

    name = models.CharField(max_length=20)

# 一对多关系

class Performer(models.Model):

    id = models.IntegerField(primary_key=True)

    name = models.CharField(max_length=20)

    nationality = models.CharField(max_length=20)

class Program(models.Model):

    id = models.IntegerField(primary_key=True)

    performer = models.ForeignKey(Performer,on_delete=models.CASCADE)

    name = models.CharField(max_length=20)

# 多对多关系

class Performer(models.Model):

    id = models.IntegerField(primary_key=True)

    name = models.CharField(max_length=20)

    nationality = models.CharField(max_length=20)

class Program(models.Model):

    id = models.IntegerField(primary_key=True)

    name = models.CharField(max_length=20)

    performer = models.ManyToManyField(Performer)


数据库读写操作

    数据的插入一般有两种方式:

    # 方法一

>>> Product.objects.create(name='p30', weight='120g', size='120*75*8mm',type_id=1)

# 方法二

>>> Product(name='p30', weight='120g', size='120*75*8mm',type_id=1) .save()

    数据的更新操作:

# 更新多条数据,查询条件filter以列表格式返回,查询结果可能是一条或多条数据

Product.objects.filter(name='p30').update(name='p40')

# 全表更新,不适用查询条件,默认对全表的数据进行更新

Product.objects.update(name='p50')

    数据的删除三种操作:

# 删除表中全部数据

Product.objects.all().delete()

# 删除一条数据

Product.objects.get(id=5).delete()

#删除多条数据

Product.objects. filter(name='p30').delete()

    查询条件get和filter的区别如下:

1.查询条件get:查询字段必须是主键或者唯一约束的字段,并且查询的数据必须存在,否则程序会抛出异常。

2.查询条件filter:查询字段没有限制,只要改字段是数据表的某一字段即可。查询结果以列表的形式返回。查询不到结果就返回空列表。


    数据查询是数据库操作中最负责并且内容最多的部分,Django是如何通过ORM框架提供API实现数据查询的,代码如下:

>>> from index.models import *

# 全表查询

>>> p = Product.objects.all()

>>> p[1].name

"HUAWEI nova 2s"

# 查询前5条数据,SQL语句里面的limit方法在Django中使用Python的列表截去分解即可实现

>>> p = Product.objects.all()[:5]

# 查询某个字段,使用values方法,以列表形式返回数据,列表元素以字典格式表示

>>> p = Product.objects.values('name')

>>> p[1]['name']

"HUAWEI nova 2s"

# values_lists 方法以列表表示返回数据,列表元素以元组格式表示

>>> p = Product.objects.values_list('name')[:3]

>>> p

<QuerySet  [('荣耀V10',), (' HUAWEI nova 2s ',), ('P30',)]>

# 使用get方法查询数据

>>> p = Product.objects.get(id=5)

>>> p.name

"HUAWEI nova 2s"

# and 查询,使用filter方法查询数据,注意区分get和filter的差异

>>> p = Product.objects. filter(name='P30', id=8)

>>> p

<QuerySet  [<Product: Product object (9) >]>

# SQL的or查询,需要引入Q,编写格式: Q(field=value) | Q (field=value)

>>> from django.db.models import Q

>>> p = Product.objects.filter(Q(name='P30')|Q(id=8))

# 使用count方法统计查询数据

>>> p = Product.objects.filter(name='P30').count()

# 去重查询,distinct方法

>>> p = Product.objects.values('name').filter(name='P30').distinct()

# 降序排序,只需要在order_by里面的字段前面加-即可

>>> p = Product.objects. order_by('-id')


相关文章

  • 管理器 Manager

    管理器是 Django 的模型进行数据库的查询操作的接口 ,用于与数据库进行交互,Django 应用的每个模型都拥...

  • Django模型

    Django是怎么链接数据库的呢。 django模型映射关系:模型类 >>>>>>>>>>>>>>>数据库类属性>...

  • 四 Django 模型和数据库基础

    一、简介 Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支...

  • django框架-9模型(数据库)

    django模型里与数据库相关代码一般都写在models.py中 django模型支持sqlite3,Mysql,...

  • django模型(数据库)

    Django模型是与数据库相关的,与数据库相关的代码一般写在models.py中,Django支持sqlite3,...

  • Django blog - Django models 介绍

    欢迎访问个人博客 Abstract Django 模型models是与数据库相关的。Django 为 sqlite...

  • HelloDjango - Python+Django+xadm

    第二篇我们来学习模型的建立。 模型 Django模型Models是与数据库相关的,与数据库相关的代码一般写在mod...

  • Django(六)模型与数据库

    Django对各种数据库提供了很好的支持,而且为很多数据库提供了统一的调用API,这些API统称为ORM框架。...

  • Python学习打call第五十七天:Django Model

    Django Model 模型 Django Model层是Django的数据模型层,每一个Model类就是数据库...

  • 数据模型操作(1)

    Django操作数据库 -----数据模型MVT:model数据模型部分 1. Django 连接数据库 修改项目...

网友评论

      本文标题:Django(六)模型与数据库

      本文链接:https://www.haomeiwen.com/subject/fihojctx.html