zoukankan      html  css  js  c++  java
  • 在django中使用orm来操作MySQL数据库的建表,增删改

    多张表之间的三种关系:一对一,一对多,多对多

    创建表

    一对一
        xx = models.OneToOneField(to='表明',to_field='字段名',on_delete=models.CASCADE)
        #删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除,2.x版本的django要写
        
    一对多
        xx = models.Freignkey(to='表名',to_field='字段名',on_delete=models.CASCADE)
        
    多对多
        xx = models.ManyToManyField(to='另外一个表明')#只是自动创建第三张表

    数据的增删改

    一对一增加
    mew_author_detail = models.AuthorDetail.objects.create(
        birthday='1979-08-08',
        telephone='13811223344',
        addr='黑龙江哈尔滨'
    )
    
    obj = models.AuthorDetail.objects.filter(addr='山西临汾').first()
    
    #方式1
    models.Author.objects.create(
        name='王涛',
        age='40',
        authorDetail=new_author_detail,
    )
    #方式2 #常用
    models.Author.objects.create(
        name='王涛',
        age='40',
        authorDetail_id=obj.id,
    )
    
    #一对多
    #方式1
    obj = models.Publish.objects.get(id=2)
    models.Book.objects.create(
        title = '朝花夕拾',
        pubilshDate='2019-07-22',
        price=3,
        publishs=obj,
    )
    #方式2 常用
    models.Book.objects.create(
        title='朝花夕拾',
        publishDate='2019-07-21',
        price=3.5,
        publishs_id=obj.id
    )
    
    多对多
    方式1        常用
    book_obj = models.Book.objects.get(id=1)
    book_obj.authors.add(*[1,2])
    方式2
    author1 = models.Author.objects.get(id=1)
    author2 = models.Author.objects.get(id=3)
    book_obj=models.Book.objects.get(id=5)
    book_obj.authors.add(*[author1,author2])

    一对一和一对多的删除和单表删除是一样的
    一对一 表一外键关联到表二,表一删除,不影响表二,表二删除会影响表一
        models.AuthorDetail.objects.get(id=2).delete()
        mmodels.author.objects.get(id=3).delete()
        
    一对多
        models.Pubish.objects.get(id=1).delete()
        models.Book.objects.get(id=1).delete()
    
    多对多关系删除
        book_obj = models.Book.objects.get(id=6)
        book_obj.authors.remove(6)
        book_obj.authors.remove(*[5,6])
        book_obj.authors.clear() #清空
        book_obj.authors.set(['5','6']) #删除然后更新

    更新

    一对一
    models.Author.objects.filter(id=5).update(
        name='崔老师',
        age=16,
        authorDetail_id=4,
    )
    一对多
    models.Book.objects.filter(pk=4).update(
        title='B哥的往事2',
        publishs_id=3,
    )
    多对多
    book_obj = models.Book.objects.get(id=6)
    book_obj.authors.set(['5','6']) #删除然后更新
  • 相关阅读:
    flex+spring3.0+blazds 数据推送整理版
    深入理解java虚拟机学习笔记1.
    一个netty序列化引起的思考。
    万年历
    面试理论题
    EF之Database First
    20120902 09:29 SQL、LINQ、Lambda 三种用法
    内容漂浮在图片上(div漂浮)
    生成订单号
    时间对比
  • 原文地址:https://www.cnblogs.com/wang-xing-hao/p/11234655.html
Copyright © 2011-2022 走看看