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

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

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

                                            

一,数据库连接准备

首先,在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的数据库更新语句:

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代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内容列表项</title>
</head>
<body>
    <h3><a href="/add_publisher/" class="text-danger text-center">添加出版社</a></h3>
    <table border="1">
        <thead>
            <tr>
                <th>序号</th>
                <th>ID</th>
                <th>出版社名</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            {% for publisher in publisher_list %}
                <tr>
                    <td>{{ forloop.counter }}</td>
                    <td>{{ publisher.id }}</td>
                    <td>{{ publisher.name }}</td>
                    <td>
                        <a href="/delete_publisher/?id={{ publisher.id }}&name={{ publisher.name }}">删除</a><!--a标签是GET请求-->
                        <a href="/edit_publisher/?id={{ publisher.id }}">编辑</a>
                    </td>
                </tr>
            {% endfor %}
            
        </tbody>
    </table>
</body>
</html>

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

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

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

效果展示:

                       

二,删除操作

#删除数据(删)
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