Django models 的增删改查

增

from app01.models import *

    #create方式一:   Author.objects.create(name=‘Alvin‘)

    #create方式二:   Author.objects.create(**{"name":"alex"})    #推荐使用这种

    #save方式一:     author=Author(name="alvin")
                    author.save()

    #save方式二:     author=Author()
                    author.name="alvin"
                    author.save()
#一对多(ForeignKey):

    #方式一: 由于绑定一对多的字段,比如publish,存到数据库中的字段名叫publish_id,所以我们可以直接给这个
    #       字段设定对应值:
           Book.objects.create(title=‘php‘,
                               publisher_id=2,   #这里的2是指为该book对象绑定了Publisher表中id=2的行对象
                               publication_date=‘2017-7-7‘,
                               price=99)

    #方式二:
    #       <1> 先获取要绑定的Publisher对象:
        pub_obj=Publisher(name=‘河大出版社‘,address=‘保定‘,city=‘保定‘,
                state_province=‘河北‘,country=‘China‘,website=‘http://www.hbu.com‘)
    OR  pub_obj=Publisher.objects.get(id=1)

    #       <2>将 publisher_id=2 改为  publisher=pub_obj

#多对多(ManyToManyField()):

    author1=Author.objects.get(id=1)
    author2=Author.objects.filter(name=‘alvin‘)[0]
    book=Book.objects.get(id=1)
    book.authors.add(author1,author2)
    #等同于:
    book.authors.add(*[author1,author2])
    book.authors.remove(*[author1,author2])
    #-------------------
    book=models.Book.objects.filter(id__gt=1)
    authors=models.Author.objects.filter(id=1)[0]
    authors.book_set.add(*book)
    authors.book_set.remove(*book)
    #-------------------
    book.authors.add(1)
    book.authors.remove(1)
    authors.book_set.add(1)
    authors.book_set.remove(1)

#注意: 如果第三张表是通过models.ManyToManyField()自动创建的,那么绑定关系只有上面一种方式
#     如果第三张表是自己创建的:
     class Book2Author(models.Model):
            author=models.ForeignKey("Author")
            Book=  models.ForeignKey("Book")
#     那么就还有一种方式:
            author_obj=models.Author.objects.filter(id=2)[0]
            book_obj  =models.Book.objects.filter(id=3)[0]

            s=models.Book2Author.objects.create(author_id=1,Book_id=2)
            s.save()
            s=models.Book2Author(author=author_obj,Book_id=1)
            s.save()                                                       


Book.objects.filter(id=1).delete()
>>> (3, {‘app01.Book_authors‘: 2, ‘app01.Book‘: 1})
#正向
book = models.Book.objects.filter(id=1)

#删除第三张表中和女孩1关联的所有关联信息
book.author.clear()        #清空与book中id=1 关联的所有数据
book.author.remove(2)  #可以为id
book.author.remove(*[1,2,3,4])     #可以为列表,前面加*

#反向
author = models.Author.objects.filter(id=1)
author.book_set.clear() #清空与boy中id=1 关联的所有数据

#---------------- update方法直接设定对应属性----------------
    models.Book.objects.filter(id=3).update(title="PHP")
    ##sql:
    ##UPDATE "app01_book" SET "title" = ‘PHP‘ WHERE "app01_book"."id" = 3; args=(‘PHP‘, 3)

#--------------- save方法会将所有属性重新设定一遍,效率低-----------
    obj=models.Book.objects.filter(id=3)[0]
    obj.title="Python"
    obj.save()
# SELECT "app01_book"."id", "app01_book"."title", "app01_book"."price",
# "app01_book"."color", "app01_book"."page_num",
# "app01_book"."publisher_id" FROM "app01_book" WHERE "app01_book"."id" = 3 LIMIT 1;
#
# UPDATE "app01_book" SET "title" = ‘Python‘, "price" = 3333, "color" = ‘red‘, "page_num" = 556,
# "publisher_id" = 1 WHERE "app01_book"."id" = 3;

# 查询相关API:

#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

#  <2>all():                 查询所有结果

#  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

#  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

#  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

#  <6>order_by(*field):      对查询结果排序

#  <7>reverse():             对查询结果反向排序

#  <8>distinct():            从返回结果中剔除重复纪录

#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first():               返回第一条记录

# <12>last():                返回最后一条记录

#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。

原文地址:https://www.cnblogs.com/laoguiaabb/p/8184303.html

时间: 2024-08-01 10:27:56

Django models 的增删改查的相关文章

Django数据库的增删改查

通过一个实例学习Django数据库的增删改查 Django - 路由系统 url.py - 视图函数 views.py - 数据库操作 models.py - 模板引擎渲染 - HttpReponse(字符串) - render(request,'/path/a.html',{'name':'root'}) 一.示例:用户基本CURD 1.数据库设计 id hostname ip port status 2.功能的实现 创建  project (pycharm) django-admin sta

Django ORM 数据库增删改查

Django ORM 数据库增删改查 增 # 创建.增加数据(推荐) models.UserInfo.objects.create(username='root',password='123') # 创建.增加数据 dic = {'username':'eric','password':'666'} models.UserInfo.objects.create(**dic) # 创建.增加数据 obj = models.UserInfo(username='xsk',password='123'

Django rest_framework实现增删改查接口

目录 Django rest_framework实现增删改查接口 写接口前的知识准备 __all__的使用方法 序列化类配置 Response二次封装 连表深度查询 单查群查接口 单删群删接口 单增,群增接口 整体单改群改接口 局部修改数据 视图给序列化传参 Django rest_framework实现增删改查接口 本文使用Django的rest_framework框架的ModelSerializer模块和ListSerializer模块实现单查群查.单删群删.单增群增.单改群改接口. 写接口

django 安装 及增删改查

django的增删改查 原文地址:https://www.cnblogs.com/pp8080/p/11729566.html

Django单表增删改查-前后端不分离

获取到models中创建表的类,直接使用python语句可以实现增删改查,不需要使用sql语句 1,增 1 from user.models import Category 2 # 导入表 注意这里导入的是 user.models,如果dj_test不是最外层目录,就要用 dj_test.user.models 3 # 新增 4 c_obj=Category.objects.create(name='oracle1') 5 # 新增出来的就是一个对象,相当于类实例化 6 print(c_obj)

Django数据库基本增删改查操作

urls.py文件里的内容---实现url路由 from django.contrib import admin from django.urls import path,include from app01 import views urlpatterns = [ path('credata/', views.credata), ] views.py文件里方法定义 from django.shortcuts import HttpResponse import pymysql pymysql.

django操作数据库增删改查

1.django初始化配置https://blog.51cto.com/yht1990/2382898 2.创建模型D:\mysite\polls\models.py from django.db import models class Publisher(models.Model): id = models.AutoField(primary_key=True) # 自增的ID主键 name = models.CharField(max_length=64, null=False) 3.建表

django数据库基本操作-增删改查(tip)-基本

1.插入数据 1 Python代码 2 >>> from books.models import Publisher 3 >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue', 4 ... city='Berkeley', state_province='CA', country='U.S.A.', 5 ... website='http://www.apress.com/') 6 >&

二、Django学习之增删改查

增加数据 第一种方式 def index(request): #创建记录方式1 #实例化要添加的记录(对象) student_obj = models.Student( name='dazhuang', age=23, ) #自动刷新并存储到数据库 student_obj.save() return render(request,'index.html') 第二种方式 常用方法 def index(request): #创建记录方式2 # new_obj为返回值,返回这个类的对象 (model对