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>### 实例```pythonfrom django.shortcuts import render, HttpResponsefrom .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 = 111book.save() # 保存return HttpResponse("over")
- 打印的友好显示
主键查询: <Book:(dark, no, 222.0)>条件查询: <QuerySet [<Book: <Book:(deep, van, 234.0)>>]>条件查询,获得第一条数据 <Book:(deep, van, 234.0)>
