Django实现简单的增删改查


Django实现简单的增删改查

前言

之后的项目可能会用到Django来编写后端,提前学习熟悉一下。

项目启动不起来的话,查看下面的文章来配置参数

Pycharm项目启动参数配置

创建Django项目

社区的Pycharm没有办法直接创建Django项目,所以需要通过命令行创建,再使用Pycharm打开。

社区版pycharm创建django项目 - 冰箱喵 - 博客园

Django ORM

Django自带ORM(对象关系映射)。可以通过描述对象和数据库之间的映射,将程序中的对象自动持久化到数据库中。

ORM解析过程:

  1. ORM会将Python代码转换成SQL语句

  2. pymysql将SQL语句发送到数据库服务端

  3. 在数据库中执行SQL语句并返回结果

准备操作

通过上面的链接创建好Django项目后,文件结构应该是类似下面的:

因为Django的ORM没办法操作数据库,所以需要自己启动数据库,通过命令行来创建数据库。

1
create database user default charset=utf8;

修改设置文件setting.py中的DATABASES配置项,将信息改成对应的数据库信息

1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'User', # 数据库地址
'HOST': '127.0.0.1', # 数据库地址
'PORT': 3306,
'USER': 'root', # 数据库用户名
'PASSWORD': '123456'
}
}

修改__init__.py文件,引入pymysql模块连接数据库(需要先通过pip之类的工具安装好)

1
2
3
import pymysql

pymysql.install_as_MySQLdb()

修改models.py文件,创建数据表对应的Models类。

1
2
3
4
5
6
from django.db import models

# Create your models here.
class User(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()

添加对应的Models类后,还需要在setting.py中的INSTALLED_APPS中添加上去。

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testBackend'
]

通过命令行来创建表结构

  • python manage.py migrate

  • python manage.py makemigrations testBackend

  • python manage.py migrate testBackend

urls.py配置路由

1
2
3
4
5
6
7
from django.urls import path

from . import testdb

urlpatterns = [
path('testdb/', testdb.testdb),
]

新建文件testdb.py,该文件就是用来操作数据的。

数据库操作

$\color{red}{记得启动数据库}$

添加数据

  • testBackend.models中引入对应的Models

  • 创建对应的Models对象

  • 调用save方法添加数据

testdb.py

1
2
3
4
5
6
7
8
from django.http import HttpResponse

from testBackend.models import User

def testdb(request):
user = User(name='clz', age=22)
user.save()
return HttpResponse("<p>添加数据成功</p>")

获取数据

  • 通过User.objects.all()获取所有数据

  • 之后遍历数据,拿到想要的部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.http import HttpResponse

from testBackend.models import User

def testdb(request):
result = ""

users = User.objects.all()

for user in users:
result += f'<p>' \
f'<span> id: {user.id}</span>' \
f'<span> name: {user.name}</span>'\
f'<span> age: {user.age}</span>' \
f'</p>'

return HttpResponse("<p>" + result + "</p>")

当然,获取数据并不是只有all()方法,还可以使用filter()方法设置过滤条件、get()方法获取单个对象、order_by()对数据进行排序等。($\color{red}{方法支持链式调用}$)

  • filter()
1
users = User.objects.filter(name='czh')

  • get()
1
2
3
4
5
6
7
user = User.objects.get(id=2)  # 如果得到的结果不只是一个对象会报错

result += f'<p>' \
f'<span> id: {user.id}</span>' \
f'<span> name: {user.name}</span>'\
f'<span> age: {user.age}</span>' \
f'</p>'

  • order_by()
1
users = User.objects.order_by("age")

  • 链式调用
1
2
3
# filter(id__lte = 33)意味着 <=,
# 对应SQL:select * from User where id <= 33
users = User.objects.filter(id__lte = 33).order_by('age')

还可以配合Python的切片使用

1
2
3
4
# filter(id__lte = 33)意味着 <=,
# 对应SQL:select * from User where id <= 33
users = User.objects.filter(id__lte = 33).order_by('age')
users = users[2:]

更多:django 之 select filter查询

修改数据

修改数据主要有两种方式:

    • 通过get()方法获取唯一的一个对象实例

    • 修改该对象实例的属性

    • 调用save()方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    def testdb(request):
    result = "修改前:"

    users = User.objects.all()

    for user in users:
    result += f'<p>' \
    f'<span> id: {user.id}</span>' \
    f'<span> name: {user.name}</span>'\
    f'<span> age: {user.age}</span>' \
    f'</p>'

    updateuser = User.objects.get(id=1)
    updateuser.age = 999
    updateuser.save()

    result += "修改后:"

    users = User.objects.all()

    for user in users:
    result += f'<p>' \
    f'<span> id: {user.id}</span>' \
    f'<span> name: {user.name}</span>' \
    f'<span> age: {user.age}</span>' \
    f'</p>'

    return HttpResponse("<p>" + result + "</p>")

    • 通过filter()等方法获取符合修改条件的对象$\color{red}{集合}$

    • 调用update()方法修改

    1
    User.objects.filter(id=1).update(age=888)

删除数据

删除数据只需要调用对象的delete()方法即可,对象集合调用delete()方法也可以

1
2
deleteuser = User.objects.get(id=1)
deleteuser.delete()
1
User.objects.filter(id=2).delete()

参考

Django 模型 | 菜鸟教程

社区版pycharm创建django项目 - 冰箱喵 - 博客园

django 之 select filter查询


文章作者: 赤蓝紫
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 赤蓝紫 !
评论
  目录