Django —— ORM对MySQL数据库的增删改查

一篇上文章录了Django的项目中ORM操作数据库的相关配置

接下来介绍一下具体对是数据库实现增删改查的操作:

首先,项目结构如下(Python3.6版本)

                                            Django —— ORM对MySQL数据库的增删改查_第1张图片

一,数据库连接准备

首先,在day03,目录下的setting.py文件中配置连接数据的参数(的MySQL为例)

DATABASES = {
    'default': {
        # 连接数据库的类型,最后一位
        'ENGINE': 'django.db.backends.mysql',
        #连接数据库的地址
        'HOST': '127.0.0.1',
        #端口
        'PORT': 3306,
        # 数据库名称
        'NAME': "day61",
        #用户
        'USER': 'root',
        #密码
        'PASSWORD': '*************'
    }
}

 然后,在__init__.py文件中添加如下代码

import pymysql
#告诉Django,用pymysql代替MySQLdb(MySQLdb不支持中py3)
pymysql.install_as_MySQLdb()

ORM对数据库操作基于对类级与数据对应关系,所以,在app01中的models.py中新建一个类

class Publisher(models.Model):
    id = models.AutoField(primary_key=True) # 创建自增的一个主键
    name = models.CharField(null=False, max_length=64, unique=True) #varchar且不能为空的字段

若使用pycharm或的IntelliJ,直接点击终端,执行ORM的数据库更新语句:

Django —— ORM对MySQL数据库的增删改查_第2张图片

python manage.py makemigrations # 将类(数据库)的变化提交
python manage.py migrate        # 执行变化

执行完毕,即已新建或更新数据库,如报错检查数据库及相关服务是否启动

二,查询操作

首先在day03中的urls.py中添加如下的URL对应关系,对应增,删,改,查

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from .views import yimi, xiaohei
from app01 import views

# 注意上面最后两句引用,对应你的实际对应关系

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^publisher_list/', views.publisher_list),
    url(r'^add_publisher/', views.add_publisher),
    url(r'^delete_publisher/', views.delete_publisher),
    url(r'^edit_publisher/', views.edit_publisher),

    url(r'^test/', views.test),
]

让数据库中所有内容在HTML界面显示出来

#展示所创建的数据表中的内容(查)
def publisher_list(request):#order_by("id") 按照ID排序
    ret = models.Publisher.objects.all().order_by("id")#数据库中查询所有用户,利用orm 
    # print(ret[0].id, ret[0].name)
    # 得到的是两个UserInfo object对象,因为models的class对应的表中,暂时只有两条数据
    return render(request, "publisher_list.html", {"publisher_list": ret})

publisher.py代码如下:




    
    内容列表项


    

添加出版社

{% for publisher in publisher_list %} {% endfor %}
序号 ID 出版社名 操作
{{ forloop.counter }} {{ publisher.id }} {{ publisher.name }} 删除 编辑

在数据内添加些示例数据,使用编辑器右侧边自带的小工具:

Django —— ORM对MySQL数据库的增删改查_第3张图片

选择你需要用的数据库,这里以MySQL的为例

Django —— ORM对MySQL数据库的增删改查_第4张图片

下面需要你填的:数据库名称,用户名,密码(左下角驱动自行点击下载下来)

Django —— ORM对MySQL数据库的增删改查_第5张图片

Django —— ORM对MySQL数据库的增删改查_第6张图片

效果展示:

               Django —— ORM对MySQL数据库的增删改查_第7张图片        

二,删除操作

#删除数据(删)
def delete_publisher(request):
    del_id = request.GET.get("id",None)  # 获取到get请求的参数中的id内容
    del_name = request.GET.get("name",None)
    print("删除ID为{0},名称为‘{1}’的数据".format(del_id,del_name))
    if del_id: 
        del_obj = models.Publisher.objects.get(id=del_id) # 继承models中的数据库类
        del_obj.delete()  # 删除操作
        return redirect("/publisher_list/")
    else:
        return HttpResponse("ERROR,检查数据后再试") #若不存在数据或其他错误

我们已经在第一部中添加了URL对应关系,直接编写函数,删除后直接跳转到展示界面,终端中显示你删除的数据

三,增加操作

#增加数据(增)
def add_publisher(request):#第一次请求页面的时候,返回一个页面,页面有两个填写框
    error_msg = ""
    if request.method == "POST":
        new_name = request.POST.get("publisher",None)# print(new_name)
        print("你添加的出版社名称为:{0}".format(new_name))
        models.Publisher.objects.create(name=new_name)#数据库中新创建一条数据行
        return redirect("/publisher_list/") # redirect返回方法 HttpResponse返回字符串
    else:
        error_msg = "出版社名称不能为空"
    return render(request, "add_publisher.html", {"error":error_msg})#render完成HTML界面替换

四,编辑操作

#编辑出版社(更新操作)(改)
def edit_publisher(request):
    if request.method == "POST":
        print(request.POST)
        edit_id = request.POST.get("publisher_id")
        new_name = request.POST.get("publisher_name")
        edit_publisher = models.Publisher.objects.get(id=edit_id)
        edit_publisher.name = new_name
        edit_publisher.save()  # 把修改提交到数据库
        #跳转到出版社列表页,查看是否修改
        return redirect("/publisher_list/")
    edit_id = request.GET.get("id")
    if edit_id:
        publisher_obj = models.Publisher.objects.get(id=edit_id)#获取到数据内的这条记录,
        # 在html界面的替换语句那里加上.name表示,获取这条记录中的name值(套路)
        return render(request,"edit_publisher.html", {"publisher": publisher_obj})

 

完整项目:https://download.csdn.net/download/qq_36274515/10620066

你可能感兴趣的:(ORM,Django)