在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']) #删除然后更新

 

转载于:https://www.cnblogs.com/wang-xing-hao/p/11234655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值