AqYoung

分享渗透知识与技巧

0%

Django之数据库操作

Django实现数据库操作(增删改查)

数据库配置(mysql)

下面还是以上一篇为例(hellojango),之后python manage starapp two 创建一个新的app

实现student数据库的增删改查

1、配置”DATABASES”:

打开hellojango/setting.py。

找到DATABASES修改为如下代码:

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',    # 原本默认连接sqlite
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',    # 需要创建一个库
        'USER': 'root',
        'PASSWORD': 'toor',
        'HOST': '192.168.11.15',
        'PORT': '3306',
    }
}

2、安装数据库引擎(pymysql)

修改hellojango/_init.py

import pymysql

pymysql.install_as_MySQLdb()

创建模型

在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。

Django遵循DRY原则,所以我们只需要定义一下数据模型,其他都不用关系,下面创建一个Sudent模型:

from django.db import models

# Create your models here.

class Student(models.Model):
    s_name = models.CharField(max_length=16)
    s_age = models.IntegerField(default=1)

参数说明:
CharField 表示字符字段
IntegerField 表示int字段
除此之外还有:DateTimeField 表示日期时间字段,ImageField 表示图像字段等等。

激活模型

创建完成模型代码,之后需要激活模型,django会根据你的代码创建数据库表,比如上面会创建一个Student表,然后创建s_name、s_age两个字段

配置stting.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'two.apps.TwoConfig',    #添加在这里
    # 'two',
]

在终端中输入:

python manage.py migrate
python manage.py makemigrations

数据库操作具体实现

新增数据

urls.py

from two import views
urlpatterns = [
    url(r'^addstudent/', views.add_student),
]

之后会提示没有add_student这个类,如果你是在pycharm中编写的话,可以用ALT+CTRL自动在 two/views.py自动创建这个类,完整代码如下:

def add_student(request):
    student = Student()    #实例化一个student对象
    num = random.randint(0, 1000)
    student.s_name = "yang {id}".format(id=num)    # 添加s._name
    student.s_age = num
    student.save()    # 保存

    return HttpResponse("add success")

在此之后启动runserver,就可以访问localhost:8000/addstudent,看看数据库中有没有新增数据

查询数据

urls.py

from two import views
urlpatterns = [
    url(r'^addstudent/', views.add_student),
    url(r'^getstudent/', views.get_student),
]

同样的创建一个get_student类

def get_student(request):
students = Student.objects.all() #查询所有数据
for student in students:
print(student.s_name)

conntext = {
    "students": students
}

# return HttpResponse("student list")
return render(request, "index.html", context=conntext)

由于我上面index.html,所以这里在two创建一个文件夹为templates用来存放index.html

index.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生列表</title>
</head>
<body>
<ul>
    {% for student in students %}
	        
  • {{student.s_name}}
  • {% endfor %} </ul> </body> </html>

    修改数据&&删除数据

    同样的在urls.py添加两条规则,以访问页面。

    from two import views
    urlpatterns = [
        url(r'^addstudent/', views.add_student),
        url(r'^getstudent/', views.get_student),
        url(r'^upstudent/', views.up_student),
    url(r'^destudent/',views.de_student),
    ]

    增加和删除都需要先查询数据,所以要给定”键值”,django默认id为主键

    views.py新增如下代码:

    def up_student(request):
    
        student = Student.objects.get(pk=3)        #查询数据
        student.s_name='zhangsan'    # 重新给字段赋值
        student.save()    #保存
        return HttpResponse("updata sucess")
    
    
    def de_student(request):
        student = Student.objects.get(pk=4)    #查询数据
        student.delete()    #删除字段
        return HttpResponse("delete sucess")

    至此,Django中数据库的操作就到这来告一段落了,附上官方文档


    声明:

    • 笔者初衷用于分享与交流网络知识,若读者因此作出任何危害网络安全行为后果自负,与作者无关!