前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实现简单的增删改查

Django实现简单的增删改查

作者头像
赤蓝紫
发布2023-03-16 15:31:09
1.4K0
发布2023-03-16 15:31:09
举报
文章被收录于专栏:clz

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没办法操作数据库,所以需要自己启动数据库,通过命令行来创建数据库。

代码语言:javascript
复制
create database user default charset=utf8;

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

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'NAME': 'User',      # 数据库地址
        'HOST': '127.0.0.1', # 数据库地址
        'PORT': 3306,
        'USER': 'root', # 数据库用户名
        'PASSWORD': '123456'    
    }
}

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

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'NAME': 'User',      # 数据库地址
        'HOST': '127.0.0.1', # 数据库地址
        'PORT': 3306,
        'USER': 'root', # 数据库用户名
        'PASSWORD': '123456'    
    }
}

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

代码语言:javascript
复制
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中添加上去。

代码语言:javascript
复制
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配置路由

代码语言:javascript
复制
from django.urls import path

from . import testdb

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

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

数据库操作

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

添加数据

  • testBackend.models中引入对应的Models
  • 创建对应的Models对象
  • 调用save方法添加数据

testdb.py

代码语言:javascript
复制
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()获取所有数据
  • 之后遍历数据,拿到想要的部分
代码语言:javascript
复制
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>")

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

  • filter()
代码语言:javascript
复制
users = User.objects.filter(name='czh')
  • get()
代码语言:javascript
复制
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()
代码语言:javascript
复制
users = User.objects.order_by("age")
  • 链式调用
代码语言:javascript
复制
# filter(id__lte = 33)意味着 <=,
# 对应SQL:select * from User where id <= 33
users = User.objects.filter(id__lte = 33).order_by('age')

还可以配合Python的切片使用

代码语言:javascript
复制
# 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()方法
代码语言:javascript
复制
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()方法修改
代码语言:javascript
复制
User.objects.filter(id=1).update(age=888)

删除数据

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

代码语言:javascript
复制
User.objects.filter(id=1).update(age=888)
代码语言:javascript
复制
User.objects.filter(id=2).delete()

参考

Django 模型 | 菜鸟教程

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

django 之 select filter查询

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django实现简单的增删改查
    • 前言
      • 创建Django项目
        • Django ORM
          • 准备操作
            • 数据库操作
              • 添加数据
              • 获取数据
              • 修改数据
              • 删除数据
            • 参考
            相关产品与服务
            数据库专家服务
            数据库专家服务(Database Expert Service,DBexpert)为您提供专业化的数据库服务。仅需提交您的具体问题和需求,即可获得腾讯云数据库专家的专业支持,助您解决各类专业化问题。腾讯云数据库专家服务团队均有10年以上的 DBA 经验,拥有亿级用户产品的数据库管理经验,以及丰富的服务经验。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档