Django开发操作数据库更简单,内部提供了ORM框架
ORM的流程

ORM
ORM,全称 Object Relational Mapping (对象关系映射),通过 ORM 我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性, ORM 在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。
- 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
- 模型类的每个属性都相当于一个数据库的字段。
使用 ORM 有许多优点
- 易用性:使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。
- 性能损耗小: ORM 转换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。
- 设计灵活:可以轻松的写出复杂的查询。
- 可移植性: Django 封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite ,可以非常轻松的切换数据库。
我们需要安装第三方模块
pip install mysqlclient
ORM可以帮助我们做两件事:
- 创建、修改、删除数据库中的表(不用你写SQL语句)
- 操作表中的数据(不用写SQL语句)
自己创建数据库
- 启动MySQL服务
- 自带工具创建数据库
create database 名称 default charset utf8 collate utf8_general_ci
连接数据库
在settings.py中DATABASES中修改
DATABASES = {
'default' : {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'dbname',
'USER' : 'root',
'PASSWORD' : '',
'HOST' : '',
'PORT' : '',
}
}
Django操作表
models.py中创建类
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
python3 manage.py makemigrations
python3 manage.py migrate
注意:app需要提前注册


在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:
- 手动输入一个值
- 设置默认值
age = models.IntegerField(default=2)
- 允许为空
data = models.IntegerField(null=True,blank=True)
以后在开发中如果想要对表结构进行调整:
- 在models.py文件中操作类即可
- 命令
python3 manage.py makemigrations
python3 manage.py migrate
数据库操作
新建
表名.objects.create(字段="")
删除
使用delete()函数删除
表名.objects.filter(过滤条件).delete() 删除过滤条件
表名.objects.all().delete() 删除整个表
获取数据
all()函数整个表 获取的是QuerSet类型 [对象,对象,对象]
表名.objects.all()
获取第一条数据[对象]
表名.objects.filter(id=1).first()
更新数据
表名.objects.filter(id=2).update(age=999)
表名.objects.all().update(password=999)
表名.objects.filter(name="张三").update(age=999)
实例:用户管理
1.展示用户列表
- url
- 函数
- 获取所有用户信息
- HTML渲染
2.添加用户
- url
- 函数
- GET,看到页面,输入内容
- POST,提交->写到数据库
3.删除用户
- url
- GET拼接url
list.html列出用户信息
#list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<a href="/add/">用户添加</a>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in datelist %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
<td>
<a href="http://127.0.0.1:8000/delete/?nid={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
add.html添加用户页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<h1>用户添加</h1>
<form method="post">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="submit" value="提交">
</form>
</body>
</html>
用户信息视图函数
def list(request):
date_list = UserInfo.objects.all()
return render(request,'list.html',{"datelist":date_list})
添加用户用户视图函数
def add(request):
if request.method == "GET":
return render(request,'add.html')
user = request.POST.get("user")
pwd = request.POST.get("pwd")
age = request.POST.get("age")
UserInfo.objects.create(name=user,password=pwd,age=age)
return redirect("/list/")
删除用户视图函数
def delete(request):
nid = request.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("http://127.0.0.1:8000/list")
用户添加

用户列表

点击删除用户信息后

人生漫漫其修远兮,网安无止境。
一同前行,加油!
本文介绍了如何使用Django的ORM框架进行数据库操作,包括创建数据库连接、定义模型、迁移表结构以及进行增删改查等操作。详细展示了用户管理的实例,包括用户列表展示、添加用户和删除用户的URL、视图函数及HTML模板。通过ORM,开发者可以更方便地管理和操作数据库,提高开发效率。
477





