django作为一个较成熟的web框架,自然也少不了常见的各种功能。
本文将简单介绍django中如何操作mysql数据库(增删改查)
并结合实际案例进行说明
django使用/连接mysql的方法此处不展开,请参考我的其他博客文章:
本文在一个加法页面上添加新的数据存储功能,该页面实现可以参考我的其他博客文章:
内容大纲
1 建表
django的数据库操作可以直接使用model来定义,具有幂等性,
包括建表、修改字段、删表、删库等常用的增删改查命令都已封装好,可以直接调用,无需手工登录数据库用sql命令创建。
这一点还是很方便的,省了不少力气
如下所示,在app1/models.py 文件中新增一个class。
定义表名为cal,表中定义3个字段并指明字段类型
(实际表名会是app_1_cal,因为默认会将app应用名称作为前缀)
在未指定primary_key的情况下,Django会默认创建一个id自增字段作为主键。
更多细节请参考django官方文档:
https://docs.djangoproject.com/zh-hans/3.0/howto/custom-model-fields/
from django.db import models # Create your models here. class cal(models.Model): value_a = models.CharField(max_length=50) value_b = models.FloatField(max_length=50) sum_ab = models.CharField(max_length=50)
最后执行以下命令更新数据库表
python manage.py makemigrations python manage.py migrate
登录数据库,新表已经建立
2 数据写入
对于实例cal,可以直接使用django自带方法写入数据,而不必再使用sql语句
编辑 app_1/views.py 新增以下代码
cal.objects.create(value_a=value_a, value_b=value_b, sum_ab=sum_ab)
3 编辑urls.py
from django.contrib import admin from django.urls import path from app_1 import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('calpage/', views.CalPage), path('result/', views.Result), path('cal_list/', views.Cal_list), path('del/', views.Del), ]
4 views中新增查询和删除
def Cal_list(requst): data = cal.objects.all() return render(requst, 'cal_list.html', context={'data': data}) def Del(requst): cal.objects.all().delete() return HttpResponse('已成功删库,请收拾好细软准备跑路!')
5 新增html页面,展示记录
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>Cal_list</title> </head> <body> <table border="1"> <thead> <tr> <th>加数1</th> <th>加数2</th> <th>和</th> </tr> </thead> {% for i in data %} <tr> <td>{{ i.value_a }}</td> <td>{{ i.value_b }}</td> <td>{{ i.sum_ab }}</td> </tr> {% endfor %} </table> <br> <form action="/calpage/" method="POST"> {% csrf_token %} <input type="submit" value="返回主页面"> </form> <br> <form action="/del/" method="POST"> {% csrf_token %} <input type="submit" value="删库跑路"> </form> </body>
6 结果展示
可以看到,由于启用了csrf_token,cal_list后自动生成了一串token用于验证
删除之后,数据表中已没有任何数据