django sql关系型数据库操作

django sql关系型数据库操作

  在数据库中,表和表之间往往存在着一些联系,例如1对1,1对多,多对多等,在django 的model 中,可以对此进行很好的定义,同样也会有一些相应的操作

1. 一对一

  

    aythorDetail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE,related_name='xx')
    # 设置与AuthorDetail一对一关系,并且不设置级联删除
    # SQL :foreign key unique
    # to='AuthorDetail' 反射方式找到表  ;to=AuthorDetail 这种方式不可以把AutorDetail表写到这个表的上面
    # to_field 不写默认指向id,表示要关联的对象字段
    # models.SET_NULL 取消级联,双方可以删除,sql不报错
    # models.CASCADE 级联,双方不可以删除,删除主键方会进行报错
    # related_name 当使用双下划线进行join反向查询的时候,可以用xx来进行表名称的题换

 在model 定义一个字段aythorDetail,存储与sql 中属性名称为  : aythorDetail_id

 当我们想要对其进行增加数据时,可以对应的指定一个model,也可以对应的写上model 的id (需要注意的是,一个model 只能对应一个model)

2.多对一

publishs = models.ForeignKey(to ='Publish',on_delete=models.CASCADE) 

 

  基本的属性同上,相当于在sql 中指定了外键

 

3.多对多

authors = models.ManyToManyField(to = 'Author')

 

这段代码不会生成属性,会自动生成一个表,包含着所在的model_id和指向的model_id,相当于手动创建一个表:代码如下

# # 多对多可以使用的另一种方法
# class BookToAuthor(models.Model):
#     book_id = models.ForeignKey(to = 'Book')
#     author_id = models.ForeignKey(to='Author')

 区别在于手动创建,对于django 为我们提供的一些第三方方法就不能使用了

 

posted @ 2020-08-17 13:25  Sunny抹茶  阅读(223)  评论(0)    收藏  举报