ORM
- 将
ORM
模型映射到数据库中的步骤如下: - 在
settings.py
中的DATABASES
配置好数据库 - 确保app已安装(
INSTALLED APPS
) - 在app的
models.py
中定义好模型,该模型(类)必须继承于models.MODEL
```python from django.db import models
Create your models here.
class Book(models.Model):
# 设置主键
id = models.AutoField(primary_key=True)
# null=False 表示不为空,其实是默认的
name = models.CharField(max_length=100, null=False)
author = models.CharField(max_length=100, null=False)
price = models.FloatField(null=False, default=0.0)
def __str__(self): # 打印实例时返回友好显示
return "<Book:({name}, {author}, {price})>".format(name=self.name, author=self.author, price=self.price)
class Sub(models.Model):
# 如果没有设置主键,会默认给一个int类型的主键id,自增长
name = models.CharField(max_length=100, null=False)
- 在命令行终端,切换到项目所在路径
- 键入`python manage.py makemigrations`生成迁移路径
- 键入·`python manage.py migrate` 将迁移脚本映射到数据库中
- **如果一个模型没有定义主键,那么将会自动生成一个自动增长的`int`类型的主键,名字为`id`**
<a name="8bfad816"></a>
## 增删查改
<a name="94b5f4c3"></a>
### 添加数据
- 使用`ORM`模型创建一个实例化对象,再调用对象的`save()`方法保存
<a name="0a7fa4b6"></a>
### 查找数据
- 查找工作使用模型的`objects`对象。可以自定义查询对象。
- 根据主键查询。使用`实例化对象.object.get(pk=xxx)`
- 根据其他字段进行查找。使用`object.filter(command)`
<a name="40f8f022"></a>
### 删除数据
- 查找到该数据模型后,执行`实例化对象.delete()`
<a name="c1d4c42b"></a>
### 修改数据
- 查找到该数据模型后,修改模型上属性的值后,执行`save()`
<a name="480c216f"></a>
### 实例
```python
from django.shortcuts import render, HttpResponse
from .models import Book # 从当前models.py导入Book类型
# Create your views here.
def db_operation(request):
# 增加一行
book = Book(name="deep", author='van', price=234)
book.save()
book = Book(name="dark", author='no', price=222)
book.save()
# 查找
# 根据主键查找,pk表示primary key
# 可以是`具体的属性=值`这种形式
book = Book.objects.get(pk=2)
print("主键查询: ", book)
# 条件查找 filter(command)
book = Book.objects.filter(author="van")
print("条件查询: ", book)
book = Book.objects.filter(author='van').first()
print("条件查询,获得第一条数据", book)
# 删除
book = Book.objects.get(pk=2) # 获得该项
book.delete() # 删除
# 修改
book = Book.objects.get(pk=1) # 获得该项
book.price = 111
book.save() # 保存
return HttpResponse("over")
- 打印的友好显示
主键查询: <Book:(dark, no, 222.0)>
条件查询: <QuerySet [<Book: <Book:(deep, van, 234.0)>>]>
条件查询,获得第一条数据 <Book:(deep, van, 234.0)>