一: 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