前言
Django的ORM是Python开发者的利器,它简化了数据库操作,让编码更加高效和直观。本文将带你快速了解ORM的基本概念,指导你创建模型类、执行迁移、利用admin控制台,并探索ORM的视图操作。
一、ORM映射
1.1 ORM映射概念
ORM(object relational mapping) :对象关系映射
ORM映射是双向的:既可以将类映射成表,也可以将表映射成类
1.2 创建编写模型类及迁移步骤
1. 创建模型类,在models.py中创建类 2. 自定义类,需要继承models.Model 3. 自定义属性 4. 需要添加Meta()元类,指定当前类迁移完成后,在数据库表中的名字 5. 执行生成迁移文件的命令:`python manage.py makemigrations` 6. 执行具体迁移操作:`python manage.py migrate` 7. 打开pycharm中Database选项,找到sqlite选项,选择项目中的数据库文件
1.3 模型类编写
通过ORM映射在子应用app下的models.py文件中创建模型类:
#myapp/models.py from django.db import models # Create your models here. class Weather(models.Model): weather = models.CharField(max_length=100,verbose_name="天气") def __str__(self): return self.weather class Meta: db_table='修改' verbose_name_plural = "天气" # 设置当前表名的一个可读的性更好的名字
在这里我们使用到了 django 的ORM映射关系用来创建数据库表,继承自models.Model类,一个类用来表示一张表,类中的一个属性代表一个字段。
- 当某个子应用
APP
涉及到了数据库的使用时,要记得在settings
文件中进行配置
#myproject/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', ]
1.4 生成迁移文件
接下来通过manage.py命令行管理工具提供的两条,创建我们所需要的数据
python manage.py makemigrations # 创建数据库迁移文件
1.5 执行迁移
python manage.py migrate # 根据数据库迁移文件生成对应 SQL 语句并执行
二、admin控制台
2.1 admin控制台概念
admin控制台是 django 为我们提供的一个非常便捷的用来管理数据库的界面,
在主路由文件下,它对应的路由设置:path('admin/', admin.site.urls)
2.2 admin控制台超级用户
- 创建admin超级用户,使用manage.py命令行工具执行如下命令并按照提示创建即可
python manage.py createsuperuser
登录进入后:
并没有出现迁移后的表,这就要对模型类进行 注册
2.3 admin控制台模型类注册
在app下的admin.py文件中进行模型类的注册:
#myapp/admin.py from django.contrib import admin from myapp import models admin.site.register(models.Weather) #使用 register 函数接收模型类作为参数即可完成注册
注册完成,刷新页面即可看到weather表
三、ORM视图操作
最后,在视图中进行数据库操作,获取数据库中的数据来渲染到页面上,修改之前所编写的视图,并使用ORM的数据库操作获取数据
3.1 如何通过ORM操作模型类
# myapp/views.py from django.shortcuts import render from myapp import models def index(request): #使用**all**方法,获取某表中的所有数据 weathers = models.Weather.objects.all() content = { "weathers": weathers, } return render(request, 'index.html', content)
3.2 模版页面数据渲染ORM操作结果
<!DOCTYPE html> <html lang="en"> {% load staticfiles %} <head> <meta charset="UTF-8"> <title>hi</title> </head> <body> {% for weather in weathers %} <p>{{ weather }}</p> {% empty %} <p>没有任何天气</p> {% endfor %} </body> </html>