Django-ORM 單表增刪改查,萬能雙下劃線

 

from django.db import models

# Create your models here.


class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish")
authors=models.ManyToManyField("Author")

def __str__(self):
return self.name

class Publish(models.Model):

name=models.CharField(max_length=32)
city=models.CharField(max_length=32)

def __str__(self):
return self.name


# class Book_Author(models.Model):
# book=models.ForeignKey("Book")
# author=models.ForeignKey("Author")


class Author(models.Model):

name=models.CharField(max_length=32)
age=models.IntegerField(default=20)

def __str__(self):
return self.name

 

 

 

 

model(數據庫模型)------ORM-----python


表與表之間的關係(兩張表)linux

一對多

多對多

一對一
數據庫


ORM------object relation mapping django

python的類app

 


class emp():

id=。。。
name=。。。 《======》 表
salary=。。。運維


e=emp() linux運維

e.id

--------------------spa

單表操做code

表記錄的添加

方式一:
Book()
b=Book(name="python基礎",price=99,author="yuan",pub_date="2017-12-12")
b.save()
方式二:
Book.objects.create()
Book.objects.create(name="老男孩linux",price=78,author="oldboy",pub_date="2016-12-12")對象


表記錄的修改
方式一:

b=Book.objects.get(author="oldboy")
b.price=120
b.save()

方式二:
#update是QuerySet
Book.objects.filter(author="yuan").update(price=999)

表記錄的刪除:
Book.objects.filter(author="oldboy").delete()

表記錄的查詢(重點):

book_list = Book.objects.filter(id=2)
book_list=Book.objects.exclude(author="yuan").values("name","price")

book_list=Book.objects.all()
book_list = Book.objects.all()[::2]
book_list = Book.objects.all()[::-1]

#first,last,get取到的是一個實例對象,並不是一個QuerySet的集合對象
book_list = Book.objects.first()
book_list = Book.objects.last()
book_list = Book.objects.get(id=2)#只能取出一條記錄時纔不報錯


ret1=Book.objects.filter(author="oldboy").values("name")
ret2=Book.objects.filter(author="yuan").values_list("name","price")

book_list= Book.objects.all().values("name").distinct()
book_count= Book.objects.all().values("name").distinct().count()


模糊查詢 雙下劃線__

book_list=Book.objects.filter(name__icontains="P").values_list("name","price")
book_list=Book.objects.filter(id__gt=5).values_list("name","price")


多表操做(一對多):
#添加記錄
#publish_id=2
Book.objects.create(name="linux運維",price=77,pub_date="2017-12-12",publish_id=2)

#publish=object
Book.objects.create(name="GO",price=23,pub_date="2017-05-12",publish=publish_obj)

#查詢記錄(經過對象)

正向查詢:
book_obj=Book.objects.get(name="python")
pub_obj=book_obj.publish----》書籍對象對應的出版社對象
pub_obj.name
反向查詢:
pub_obj = Publish.objects.filter(name="人民出版社")[0]
pub_obj.book_set.all().values("name","price")

#查詢記錄(filter values 雙下劃線__)

#人民出版社出版過的書籍與價格
ret=Book.objects.filter(publish__name="人民出版社").values("name","price")

#python這本書出版社的名字
ret2=Publish.objects.filter(book__name="python").values("name")

#python這本書出版社的名字
ret3=Book.objects.filter(name="python").values("publish__name")

#北京的出版社出版書的名字
ret4=Book.objects.filter(publish__city="北京").values("name")

#2017年上半年出版過書的出版社的名字
ret5=Book.objects.filter(pub_date__lt="2017-07-01",pub_date__gt="2017-01-01").values("publish__name")


多表操做(多對多):

建立多對多的關係 author= models.ManyToManyField("Author")(推薦)


書籍對象它的全部關聯做者 obj=book_obj.authors.all()
綁定多對多的關係 obj.add(*QuerySet)
obj.remove(author_obj)


若是想向第三張表插入值的方式綁定關係: 手動建立第三張表

# class Book_Author(models.Model):
# book=models.ForeignKey("Book")
# author=models.ForeignKey("Author")
Book_Author.objects.create(book_id=2,author_id=3)


掌握:經過 filter values (雙下換線)進行多對多的關聯查詢(形式和一對多)

 













學生表 老師表 班級表


方案一: 學生 多對多 老師表
學生 一對多 班級


方案二: 老師 多對多 班級
學生 一對多 班級

相關文章
相關標籤/搜索