zoukankan      html  css  js  c++  java
  • ORM多表增删改查

    一 创建多表

    models.py里创建4张表:Author(作者)、AuthorDetail(作者详细信息)、Publish(出版社)、Book(书)

    四张表关系为:

     1)首先创建一对一关系。OneToOneField()

    创建Author

    class Author(models.Model):
    
    name=models.CharField( max_length=32)
    age=models.IntegerField()
    authorDetail=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE)

    models.OneToOneField是创建一对一关系的关键字,to="AuthorDetail"表示和AuthorDetail表创建一对一关系。to_field="id"表示关联字段,不写默认为Id(主键)。on_delete=models.CASCADE表示级联删除。(注:to后面的表名和字段都是字符串形式)。创建一对一关系,生成authorDetail,这个为关联属性。通过AuthorAuthorDetail表中的内容就要通过这个关联属性。(生成一对一的表,会在关联的表生成字段:authorDetail_id

    (2)创建AuthorDetail

    class AuthorDetail(models.Model):        
        birthday=models.DateField(),
        telephone=models.CharField(max_length=32) ,                      
        addr=models.CharField( max_length=64)
            

     3)然后创建多对一关系。ForeignKey()

    外键字段要加在多的一方,即Book表。

      Book表和Publish通过ForeignKey连接起来,生成Publishs关联属性。

    再建Publish表:

     4)建立多对多关系ManyToManyField

    Book表和Author具有多对多关系。可以在任何一张表加。选择在Book表加:

     5)最后生成详细字段关系表

     蓝色的只是类里面的关联属性,在表中没有这个字段,只有相应的id字段。

    二 添加记录。

     利用djangoadmin.py文件添加记录。

     1)首先在admin.py配置注册字段:

     

     2)在终端里输入:

    Python manage.py createsuperuser创建超级用户

    3)在浏览器输入:http://127.0.0.1:8000/admin/登陆页面,和数据库同步,即可添加数据。

      三 在视图函数中增删改查

     1.增加

    A.一对一

    方式一:(常用)           通过id方式

     先找到AuthorDetail中的那条记录,并生成obj对象。然后再创建Author记录时,让authorDetail_id=obj.idAuthor表中有authorDetail_id字段的)

     方式二:

     首先创建好一个new_author_detail对象。然后创建Author记录时通过authorDetail等于该对象,就建立两者一对一关系。(不需要再查找一遍了)

     B.一对多

     方式一:(常用)(id连接) 

     同一对一增加一样。可以直接把Obj放在等式里。

    方式二:(类属性连接)

     C多对多

    方式一(常用)

    直接再Book表(关联表/有关联属性的)找到要添加的那条记录,然后调用Book的关联属性添加到指定的记录。 

     可以添加多个。方式为*[3,6]。里面的数字是id

    多对多(两张表的记录都已经存在,建立两者对应关系)

    方式二:

     先找到要添加的对象Book表的和Author表的。然后调用Book表的对象的author属性的add方法,添加Author表的对象。

     2.删除

    一对一和一对多的删除和单表删除是一样的。但要考虑级联删除。

    级联删除原则:

    我和你关联,你不能随便删-----------》你删我也删(级联)

    我可以随便删,我删了对你没影响

    1)一对一

      2是关联表中的内容,直接.deledte找到的记录,对被关联表没有影响。但1中删除了id2 的记录,则在关联表中和id2(即authorDetail_id=2)的记录也都删除了。(有关联id的那个值没了,这条id值对应的那条记录也没了)

    2)一对多 

      3)多对多

    多对多删除就是删除第三张表的两者对应关系

      add方法对应。通过类的关联属性增删。

    set方法--------》先clear,add

      3.更新

    1)一对一

    更新方法.update()前必须用filter()查找。不能用get().update()要用queryset对象。 

      2)一对多

      3)多对多

    Set方法

      

  • 相关阅读:
    PS快捷键大全
    Bootstrap源码分析系列之核心CSS
    Android 检测网络连接状态
    AndroidClipSquare安卓实现方形头像裁剪
    Android实现微博分享及其注意事项
    Android 面试题之编程
    Android 内存泄漏优化总结
    Android系统关机或重启的几种实现方式
    Android字体设置,Roboto字体使用
    Android知识点剖析系列:深入了解layout_weight属性
  • 原文地址:https://www.cnblogs.com/yq055783/p/12355463.html
Copyright © 2011-2022 走看看