七.Django 模型中的常用查询及关系的实现 2021-03-05

七.Django 模型中的常用查询及关系的实现

1.表关系型数据库操作

1.1常用表查询方法

1.2常用查询条件

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着连个下划线哦)

1.3常用字段的映射关系

Mysql的数据类型映射到Django的模型数据类型

2.常用的模型字段类型

2.1 模型字段类型

1. IntegerField : 整型,映射到数据库中的int类型

2. CharField字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度

3. TextField文本类型,映射到数据库中的text类型

4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField

5. DateField日期类型,没有时间。映射到数据库中是date类型

   在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。

6. DateTimeField:   日期时间类型。映射到数据库中的是datetime类型

   在使用的时候,传递datetime.datetime()进去

2.2 Field的常用参数常用参数

  1. primary_key:  指定是否为主键。
  2. unique:  指定是否唯一。
  3. null:  指定是否为空,默认为False。
  4. blank: 等于True时form表单验证时可以为空,默认为False。
  5. default:  设置默认值。
  6. DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
  7. DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

 

 

 

 

 

 

1 id 是自动生成的不需要配置,

2 我们的属性对应表中的字段,字段类型也和表中一一对应

3.表关系的实现

3.1 表关系的实现

表关系的实现通过.外键,唯一键,联合唯一键来确定

3.2 表关系图

4. 例子:一对多

在第六节,我们建立了User表(3条消息) 六.模型基础 2021-03-03_明玥几时有的博客-CSDN博客:如下

在例子中:我们将建立一个用户与书籍的表格,一个用户可以对应很多的书籍

4.1建立新的模型

from django.db import models

# Create your models here.
'''
继承自模型类models
模型类和数据库表的关系
属性和表的字段的对应关系

'''

class BookInfo(models.Model):
    name = models.CharField(max_length= 25)
    #外键    参数:连接的表,on_delete
    book = models.ForeignKey('User',on_delete = models.CASCADE)

    class Meta:
        db_table = 'Bookinfo'         #给定表名

    def __str__(self):
        #返回数据库的属性
        return self.name

4.2将模型映射到数据库


1.首先执行以下命令,要创建映射文件

python  manage.py   makemigrations

命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行.

2.执行以下命令,将映射文件中的映射数据提交到数据库中

python  manage.py   migrate

3.进入mysql 查看映射的数据库表

  • mysql -uroot  -pqwe123             进入mysql
  • show  databases;                    查看所有的数据库
  • use look;                                 使用数据库
  • show tables                           查看数据库

打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.

注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.

在执行前,保证我们创建模型的APP是已经注册过的APP


注意:在运行之前一定要将PyCharm的程序上传到虚拟机,不然会报一下错误

pymysql.err.OperationalError: (1046, 'No database selected')

django.db.utils.OperationalError: (1046, 'No database selected')

执行过程:

  • workon                     查看虚拟环境
  • workon   name         运行虚拟环境
  • ls                              查看目录下的文件
  • cd 项目文件              进入文件
  • python manage.py makemigrations        创建映射文件
  • python manage.py migrate                     映射文件中的映射数据提交到数据库中
  • show tables               查看建立的表   

4.3添加数据

1.在子应用的views中导入models.py文件,写显示函数

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User,BookInfo        #导入建立的User,BookInfo模型
# Create your views here.

def add_book(request):
    #添加书籍名称
    book = BookInfo(name = '天龙八部',book_id = 1)
    book.save()
    return HttpResponse("书籍添加成功")

2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    #添加书籍
    path('add_book',views.add_book,name = 'update_user'),
]

3.运行结果:

4.在虚拟机的Mysql中查询新建的BookInfo表

4.4查询

1.在子应用的views中导入models.py文件,写显示函数

def seach_book(request):
    #查询书籍
    #通过用户查询ID查询用户的书籍
    user = User.objects.get(id = 3)
    #查询的时候多的一方模型类小写,一查多,set代表一查多
    book = user.bookinfo_set.all()
    print(user,book)
    return HttpResponse("查询成功")

2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [

    #查询书籍
    path('seach_book',views.seach_book ,name = 'seach_book'),
]

3.运行结果

打印的结果

4.在Mysql中User表与Bookinfo表对比

 

 

 

 

 

 

 

注:查询的是User的ID为3的书籍.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值