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):

  1. # 设置主键
  2. id = models.AutoField(primary_key=True)
  3. # null=False 表示不为空,其实是默认的
  4. name = models.CharField(max_length=100, null=False)
  5. author = models.CharField(max_length=100, null=False)
  6. price = models.FloatField(null=False, default=0.0)
  7. def __str__(self): # 打印实例时返回友好显示
  8. return "<Book:({name}, {author}, {price})>".format(name=self.name, author=self.author, price=self.price)

class Sub(models.Model):

  1. # 如果没有设置主键,会默认给一个int类型的主键id,自增长
  2. name = models.CharField(max_length=100, null=False)
  1. - 在命令行终端,切换到项目所在路径
  2. - 键入`python manage.py makemigrations`生成迁移路径
  3. - 键入·`python manage.py migrate` 将迁移脚本映射到数据库中
  4. - **如果一个模型没有定义主键,那么将会自动生成一个自动增长的`int`类型的主键,名字为`id`**
  5. <a name="8bfad816"></a>
  6. ## 增删查改
  7. <a name="94b5f4c3"></a>
  8. ### 添加数据
  9. - 使用`ORM`模型创建一个实例化对象,再调用对象的`save()`方法保存
  10. <a name="0a7fa4b6"></a>
  11. ### 查找数据
  12. - 查找工作使用模型的`objects`对象。可以自定义查询对象。
  13. - 根据主键查询。使用`实例化对象.object.get(pk=xxx)`
  14. - 根据其他字段进行查找。使用`object.filter(command)`
  15. <a name="40f8f022"></a>
  16. ### 删除数据
  17. - 查找到该数据模型后,执行`实例化对象.delete()`
  18. <a name="c1d4c42b"></a>
  19. ### 修改数据
  20. - 查找到该数据模型后,修改模型上属性的值后,执行`save()`
  21. <a name="480c216f"></a>
  22. ### 实例
  23. ```python
  24. from django.shortcuts import render, HttpResponse
  25. from .models import Book # 从当前models.py导入Book类型
  26. # Create your views here.
  27. def db_operation(request):
  28. # 增加一行
  29. book = Book(name="deep", author='van', price=234)
  30. book.save()
  31. book = Book(name="dark", author='no', price=222)
  32. book.save()
  33. # 查找
  34. # 根据主键查找,pk表示primary key
  35. # 可以是`具体的属性=值`这种形式
  36. book = Book.objects.get(pk=2)
  37. print("主键查询: ", book)
  38. # 条件查找 filter(command)
  39. book = Book.objects.filter(author="van")
  40. print("条件查询: ", book)
  41. book = Book.objects.filter(author='van').first()
  42. print("条件查询,获得第一条数据", book)
  43. # 删除
  44. book = Book.objects.get(pk=2) # 获得该项
  45. book.delete() # 删除
  46. # 修改
  47. book = Book.objects.get(pk=1) # 获得该项
  48. book.price = 111
  49. book.save() # 保存
  50. return HttpResponse("over")
  • 打印的友好显示
    1. 主键查询: <Book:(dark, no, 222.0)>
    2. 条件查询: <QuerySet [<Book: <Book:(deep, van, 234.0)>>]>
    3. 条件查询,获得第一条数据 <Book:(deep, van, 234.0)>