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 (雙下換線)進行多對多的關聯查詢(形式和一對多)
學生表 老師表 班級表
方案一: 學生 多對多 老師表
學生 一對多 班級
方案二: 老師 多對多 班級
學生 一對多 班級