Py学习  »  Django

django数据库操作-增、删、改、查(查会单独写)|8月更文挑战

y大壮 • 2 年前 • 412 次点击  
阅读 47

django数据库操作-增、删、改、查(查会单独写)|8月更文挑战

django 数据库操作-增、删、改、查(查会单独写一篇)

在本指南(以及参考资料)中,我们将参考以下模型,

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):
        return self.headline
复制代码

1 增加

要创建一个对象,用关键字参数初始化它,然后调用 save() 将其存入数据库 增加数据有两种方法。

1)save

通过创建模型类对象,执行对象的save()方法保存到数据库中。

>>> from .models import Blog
>>> book = Blog(
...         name='python',
...         tagline='ABCDEFG'
...     )
>>> blog.save()
>>> blog
复制代码

2)create

通过模型类.objects.create()保存。

>>> Blog.objects.create(
...         name='python2',
...         tagline='abcdefg'
...     )
复制代码

注意

保存 ForeignKey 和 ManyToManyField 字段*

更新 ForeignKey字段的方式与保存普通字段的方式相同——只需将正确类型的实例分配给相关字段。本例为Entry类的实例 entry 更新了 blog 属性,假设 Entry 和 Blog 的实例均已保存在数据库中(因此能在下面检索它们):

>>> from blog.models import Blog, Entry
>>> entry = Entry.objects.get(pk=1)
>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()
复制代码

更新 ManyToManyField 字段有点不同——在字段上使用 add()方法为关联关系添加一条记录。本例将 Author 实例 joe 添加至 entry 对象:

>>> from blog.models import Author
>>> joe = Author.objects.create(name="Joe")
>>> entry.authors.add(joe)
复制代码

2 修改

修改更新有两种方法

1)save

修改模型类对象的属性,然后执行save()方法

>>> blog = Blog.objects.get(name='hello')
>>> blog.name = 'aaa'
>>> blog.save()
>>> blog
<PeopleInfo: aaa>   # 在幕后执行了update
复制代码

2)update

使用模型类.objects.filter().update() ,会返回受影响的行数

>>> Blog.objects.filter(name='abcdefg').update(name='python3')
1
复制代码

3 删除

通常,删除方法被命名为 delete()。该方法立刻删除对象,并返回被删除的对象数量和一个包含了每个被删除对象类型的数量的字典。例子: 删除有两种方法

1)模型类对象delete

>>> e.delete()
(1, {'weblog.Entry': 1})
复制代码

你也能批量删除对象。所有 QuerySet 都有个 delete()方法,它会删除 QuerySet中的所有成员。

例如,这会删除 2005 发布的所有 Entry 对象:

>>> Entry.objects.filter(pub_date__year=2005).delete()
(5, {'webapp.Entry': 5})
复制代码
Entry.objects.all().delete()
复制代码
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117977
 
412 次点击