增加
增加数据有两种方法。
save
通过创建模型类对象,执行对象的save()方法保存到数据库中。
from book.models import BookInfo,PeopleInfo
book = BookInfo(
name='python\u5165\u95e8',
pub_date='2010-1-1'
)
book.save()
book
create
通过模型类.objects.create()保存。
PeopleInfo.objects.create(
name='itheima',
book=book
)
修
在Django框架中,数据库操作是核心功能之一,它提供了高效、便捷的方式来处理数据的增、删、改、查(CRUD)操作。本篇主要介绍Django中对数据库的操作,特别是多种查询方法。
我们来看如何增加数据。Django提供了两种方式来保存数据到数据库:
1. 使用`save()`方法:通过创建模型类的对象,然后调用该对象的`save()`方法来保存数据。例如:
```python
from book.models import BookInfo, PeopleInfo
book = BookInfo(name='python入门', pub_date='2010-1-1')
book.save()
```
2. 使用`create()`方法:直接通过模型类的`objects.create()`方法创建并保存数据,如:
```python
PeopleInfo.objects.create(name='itheima', book=book)
```
接下来,我们讨论如何修改数据:
1. `save()`方法:修改模型类对象的属性后,再次调用`save()`方法来更新数据库。例如:
```python
person = PeopleInfo.objects.get(name='itheima')
person.name = 'itcast'
person.save()
```
2. `update()`方法:可以批量更新满足条件的记录,返回受影响的行数。例如:
```python
PeopleInfo.objects.filter(name='itcast').update(name='H_sen')
```
接着,我们看删除数据的方式:
1. `delete()`方法:直接调用模型类对象的`delete()`方法来删除单个记录,或者:
```python
person = PeopleInfo.objects.get(name='H_sen')
person.delete()
```
2. 集合级删除:使用`ModelName.objects.filter().delete()`来删除满足条件的所有记录,如:
```python
BookInfo.objects.filter(name='python入门').delete()
```
查询数据是Django中最常用的功能,以下是一些基本查询方法:
1. `get()`方法:查询单一结果,如果不存在会抛出`DoesNotExist`异常。
```python
BookInfo.objects.get(id=1)
```
2. `all()`方法:获取所有记录。
```python
BookInfo.objects.all()
```
3. `count()`方法:计算查询结果的数量。
```python
BookInfo.objects.count()
```
除了这些基础查询,Django还提供了强大的过滤查询功能,可以实现类似SQL的`WHERE`子句操作:
- `filter()`方法:过滤出多个结果。
- `exclude()`方法:排除掉符合条件的结果。
- `get()`方法:用于过滤单一结果,与`filter()`相似,但当结果不唯一时会抛出异常。
例如,我们可以使用各种比较运算符来进行过滤:
1. 相等:`exact`(默认,可省略)。
```python
BookInfo.objects.filter(id=1)
```
2. 模糊查询:
- `contains`:查找包含指定值的记录。
```python
BookInfo.objects.filter(name__contains='传')
```
- `startswith`:以指定值开头。
```python
BookInfo.objects.filter(name__startswith='部')
```
- `endswith`:以指定值结尾。
```python
BookInfo.objects.filter(name__endswith='部')
```
3. 其他比较运算符:
- `lt`:小于。
- `gt`:大于。
- `lte`:小于等于。
- `gte`:大于等于。
- `range`:在指定范围内。
- `year`:按年份筛选。
- `month`:按月份筛选。
- `day`:按日期筛选。
例如,查询1980年发表的图书:
```python
BookInfo.objects.filter(pub_date__year=1980)
```
此外,还可以组合多个条件进行复杂查询,如使用`Q`对象进行逻辑运算,以及使用`annotate`、`order_by`、`values`、`values_list`等方法进行聚合、排序和字段选择等高级查询。
Django的数据库操作提供了丰富的API,使得开发者能方便地对数据库进行各种操作,极大地提高了开发效率。理解并熟练掌握这些方法对于Django开发者来说至关重要。