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 为我们提供的一些第三方方法就不能使用了
大三党,大家有问题可以多多建议
浙公网安备 33010602011771号