在django中使用orm来操作MySQL数据库的建表,增删改

时间:2022-01-11 08:19:48

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

创建表

 

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