publish

Django模型层之多表操作

我怕爱的太早我们不能终老 提交于 2019-12-02 06:57:11
Django模型层之多表操作 一 、表关系回顾 在讲解 MySQL 时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的 。 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号、姓名、部门名、部门职能描述,此时若公司有1万名员工,但只有3个部门,因为每一名员工后都需要跟着部门信息(部门名、部门职能),所以将会导致部门信息出现大量重复、浪费空间。 解决方法就是将数据存放于不同的表中,然后基于 foreign key 建立表之间的关联关系。 细说的话,表之间存在三种关系:多对一、一对一、多对多,那如何确定两张表之间的关系呢?按照下述步骤操作即可 左表<---------------------------------------------->右表 # 步骤一:先分析 # 分析1、先站在左表的角度 是否左表的多条记录可以对应右表的一条记录 # 分析2:再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录 # 步骤二:后确定关系 # 多对一 如果只有"分析1"成立,那么可以确定两张表的关系是:左表多对一右表,关联字段应该创建在左表中,然后foreign key 右表一个字段(通常是id) 如果只有"分析2"成立,那么可以确定两张表的关系是:右表多对一左表,关联字段应该创建在右表中,然后foreign key 左表一个字段(通常是id) #

肆拾柒 --- 模型层

落花浮王杯 提交于 2019-12-02 06:57:06
django模型层 一、单表查询 ​ 创建一个图书列表: class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digital=8,,decimal_places=2) publish_dta = models.DateField() ​ 增: models.Bool.objects.create(title = '活着',price = 50,publish_data = '2010.01.01') book_obj = models.Book(title = '三国',price = 48.8,publish_data = '2018.01.01') book_obj.save() ​ 改: models.Book.objects.filter(pk=1).update(price = 55.5) book_obj = models.Book.objects.filter(pk=2).first() book_obj.title = '三国演义' book_obj.save() ​ 删: models.Book.objects.filter(pk=1).delete() 1.1 必知必会的十三条 1.1.1 .all() res =

ListModelSerializer模块

对着背影说爱祢 提交于 2019-12-02 06:55:09
ListModelSerializer模块 一 、自定义反序列化字段 # 一些只参与反序列化的字段,但是不是与数据库关联的 # 在序列化类中规定,并在校验字段时从校验的参数字典中剔除 class PublishModelSerializer(serializers.ModelSerializer): # 自定义不入库的 反序列化 字段 re_name = serializers.CharField(write_only=True) class Meta: model = models.Publish fields = ('name', 're_name', 'address') def validate(self, attrs): name = attrs.get('name') re_name = attrs.pop('re_name') # 剔除 if name != re_name: raise serializers.ValidationError({'re_name': '确认名字有误'}) return attrs 二 、模型类中自定义序列化深度 # model类中自定义插拔的外键序列化字段,可以采用外键关联表的序列化类来完成深度查询 class Book(BaseModel): # ... @property def publish_detail(self):

模型层

一曲冷凌霜 提交于 2019-12-02 06:54:47
目录 1. ORM查询 2. django测试环境搭建 3. 单表查询 4. 多表查询 1. ORM查询 ''' 如果你想查看orm语句内部真正的sql语句有两种方式 1.如果是queryset对象 可以直接点query查看 2.配置文件中 直接配置 ''' LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', }, }} 2. django测试环境搭建 import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE","one_search.settings") import django django.setup() # 在下面可以测试django任何的py文件 3. 单表查询 # 增 ## 1 models.Book.objects.create

Django之模型层

筅森魡賤 提交于 2019-12-02 06:54:02
Django之模型层 ORM查询 1.为了让你更好的去测试你的查询语句.可以做以下几步操作 第一步:新建一个测试文件test.py, 然后把manage.py文件的一些内容复制进去 第二部:在settings下面添加一个配置文件.这样你就可以在你的测试文件去测试了,他可以显示出你所用到了sql语句. 配置如下: test.py import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "many_search.settings") import django django.setup() settings.py下: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', }, }} 练习: # 单表操作 # 增删改查 # 增 # models

Django模型层

孤人 提交于 2019-12-02 06:41:46
Django之模型层:单表操作 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增、删、改、查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql、oracle、Microsoft SQL Server等。 如果应用程序需要操作数据(比如将用户注册信息永久存放起来),那么我们需要在应用程序中编写原生sql语句,然后使用pymysql模块远程操作mysql数据库。 但是直接编写原生sql语句会存在两方面的问题,严重影响开发效率,如下 #1. sql语句的执行效率:应用开发程序员需要耗费一大部分精力去优化sql语句 #2. 数据库迁移:针对mysql开发的sql语句无法直接应用到oracle数据库上,一旦需要迁移数据库,便需要考虑跨平台问题 为了解决上述问题,django引入了ORM的概念,ORM全称Object Relational Mapping,即对象关系映射,是在pymysq之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql,取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行。 原生SQL与ORM的对应关系如下: 如此,开发人员既不用再去考虑原生SQL的优化问题,也不用考虑数据库迁移的问题

多对多字段四个方法

谁说我不能喝 提交于 2019-12-02 06:27:08
创建表 from django.db import models # Create your models here. """ 你在写orm语句的时候 跟你写sql语句一样 不要想着一次性写完 写一点查一点看一点 """ class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) publish_date = models.DateField(auto_now_add=True) # 书籍与出版社 是一对多关系 publish = models.ForeignKey(to='Publish') # 书籍与作者 是多对多 authors = models.ManyToManyField(to='Author') """ authors虚拟字段 1.告诉orm自动帮你创建第三张关系表 2.orm查询的时候 能够帮助你更加方便的查询 """ def __str__(self): return self.title class Publish(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max

django多表查询

限于喜欢 提交于 2019-12-02 06:27:08
三 添加、删除、修改记录 3.1 添加记录 !!强调!!:上图所示的表名、字段名都是mysql中的真实表/物理表,而我们下述所示所有操作,都是通过模型类来操作物理表,例如无论增删改查,所使用的字段名都模型类中的字段 按照上图所示,由于foreign key的关系,我们需要事先往app01_publish与app01_authordetail里插入记录 # 1、需求:通过模型Publish往表app01_publish里插入三家出版社 Publish.objects.create(name='北京出版社') Publish.objects.create(name='长春出版社') Publish.objects.create(name='大连出版社') # 2、需求:通过模型AuthorDetail往表app01_authordetail里插入三条作者详情 AuthorDetail.objects.create(tel='18611312331') AuthorDetail.objects.create(tel='15033413881') AuthorDetail.objects.create(tel='13011453220') 按照上图所示,插入时会涉及到多张表,我们同样分三种情况来介绍 1、多对一:app01_book与app01_publish # 需求:书籍(葵花宝典

Django 单表操作

醉酒当歌 提交于 2019-12-02 06:25:43
Django 单表操作 1 按步骤创建表 1.1 创建django项目,新建名为app01的app,在app01的models.py中创建模型 class Employee(models.Model): # 必须是models.Model的子类 id=models.AutoField(primary_key=True) name=models.CharField(max_length=16) gender=models.BooleanField(default=1) birth=models.DateField() department=models.CharField(max_length=30) salary=models.DecimalField(max_digits=10,decimal_places=1) 1.2 django的orm支持多种数据库,如果想将上述模型转为mysql数据库中的表,需要settings.py中 # 删除\注释掉原来的DATABASES配置项,新增下述配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库 'NAME': 'db1', # 要连接的数据库 'USER': 'root', # 链接数据库的用于名 'PASSWORD': '',

Django 多表操作

北战南征 提交于 2019-12-02 06:25:25
Django 多表操作 一 表关系回顾 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的。 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号、姓名、部门名、部门职能描述,此时若公司有1万名员工,但只有3个部门,因为每一名员工后都需要跟着部门信息(部门名、部门职能),所以将会导致部门信息出现大量重复、浪费空间。 解决方法就是将数据存放于不同的表中,然后基于foreign key建立表之间的关联关系。 细说的话,表之间存在三种关系:多对一、一对一、多对多,那如何确定两张表之间的关系呢?按照下述步骤操作即可 左表<------------------------------->右表 # 步骤一:先分析 #分析1、先站在左表的角度 是否左表的多条记录可以对应右表的一条记录 #分析2、再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录 # 步骤二:后确定关系 # 多对一 如果只有"分析1"成立,那么可以确定两张表的关系是:左表多对一右表,关联字段应该创建在左表中,然后foreign key 右表一个字段(通常是id) 如果只有"分析2"成立,那么可以确定两张表的关系是:右表多对一左表,关联字段应该创建在右表中,然后foreign key 左表一个字段(通常是id) # 一对一 如果"分析1"和"分析2"都不成立