一: ORM Object Relational Mapping 对象关系映射
映射关系:
表名-->类名
字段-->属性
表记录-->类实例对象
二: 创建表
1: 作者模型
一个作者有姓名和年龄
class Author(models.Model):
nid=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
age=models.IntegerField()
authorDetail=models.OneToOneField("AuthorDetail")
2 :作者详情模型
把作者的详情放到作者详情这张表里。包含:生日,手机号,家庭住址等信息。
作者模型和作者详情模型是一对一的关系(one to one)
class AuthorDetail(models.Model):
nid=models.AutoField(primary_key=True)
birthday=models.DateField()
telphone=models.BigIntegerField()
addr=models.CharField(max_length=64)
3 : 出版商模型
出版商有名称,所在城市,以及email
class Publish(models.Model):
nid=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
city=models.CharField(max_length=32)
email=models.EmailField()
4: 书籍模型
书籍有书名和出版日期
一本书可能有多个作者,一个作者可以写多本书。一本书只应该由一个出版商出版,但一个出版商可以出版多本书。
书和出版商的关系是:一对多(one to many) 外键字段建立在多的一方
作者和书籍的关系是:多对多(many to many) 可以建立在两个模型中的任意一个。会自动创建第三张表
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
publishDate=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2)
keepNum=models.IntegerField()
commentNum=models.IntegerField()
publish=models.ForeignKey(Publish)
authors=models.ManyToManyField(Author)
字段选项
每个字段有一些特有的参数,这里列出一些简单常用的l:
1 null:如果为True django 将用NULL来在数据库中存储空值。默认值为False
2 black:
3 default:
4 primary_key:
5:unique
6:choices
三: 添加表记录
1 普通字段
方法一: 推荐用
from app01 import models
dic={"name":"随波逐流出版社","city":"男京","email":"nanjing@163.com"} publish_obj=models.Publish.objects.create(**dic)
方法二:
publish_obj=models.Publish(name="oldboy出版社",city="沙河",email="oldboy@163.com")
publish_obj.save()
print(publish_obj)
当有一对多,多对多的时候,先把关联的对象查询出来再做下一步操作
2 外键字段
方法一:推荐用
publish_obj=models.Publish.objects.get(nid=1)先把关联的对象查询出来再做下一步操作 dic={"title":"水浒穿","publishDate":"2012-12-12","price":123,"keepNum":678,"commentNum":"789","publish":publish_obj} book_obj=models.Book.objects.create(**dic)
方法二:当有一对多关系的时候,建表时,django 会自动生成一个字段(publish_id 外键字段+ _id),这个字段在表里是真实存在的,可以直接用
dic={"title":"水浒穿","publishDate":"2012-12-12","price":123,"keepNum":678,"commentNum":"789","publish_id":2}
book_obj=models.Book.objects.create(**dic)
3 多对多字段
dic={"title":"xiao毛驴","publishDate":"2013-12-12","price":123,"keepNum":678,"commentNum":"789","publish_id":2}
book_obj=models.Book.objects.create(**dic)
author_huazai=models.Author.objects.create(name="BB",age=18,authorDetail_id=2)
book_obj.authors.add(author_huazai) #将某个特定的对象添加到被关联的对象集合中。
book_obj.authors.create() #创建并保存一个新对象
四:关联管理器
关联管理器:是在一对多,或者多对多的关联上下文中 使用的管理器。
1 add
2 create
3 remove
4 clean
5 set
五:查询表记录
1 查询相关API
2 双下划线之单表查询
3 基于对象的跨表查询
一对多查询:
一对一查询:
多对多查询:
4 基于双下划线的跨表查询
关键点:正向查询按字段,反向查询按表名
5 聚合查询,分组查询
6 F查询,Q查询
六: 修改表记录
pass
七: 删除表记录
pass