Django ORM 单表操作

Django 中 ORM 单表操作,增删改查

文章目录

  • [一、mysql 配置](#一、mysql 配置)
  • 二、定义模型
  • 三、增删改查
    • [1. 添加数据](#1. 添加数据)
    • [2. 查询数据](#2. 查询数据)
    • [3. 修改数据](#3. 修改数据)
    • [4. 删除数据](#4. 删除数据)

一、mysql 配置

c 复制代码
# 1.安装扩展
pip install pymysql

# 2.settings.py 中修改数据库配置
DATABASES = { 
    'default': 
    { 
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'runoob', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 
        'PORT': 3306, # 端口 
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456', # 数据库密码
    }  
}

# 3. 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()

二、定义模型

  1. Django 规定,如果要使用模型,必须要创建一个 app。
c 复制代码
django-admin startapp app
  1. 修改 django_project/app/models.py 文件代码:
py 复制代码
# models.py
from django.db import models # 包含了定义模型所需的所有工具

class User(models.Model):  # 在数据库中创建一个对应的表
    name = models.CharField(max_length=20)
    
    # 用于定义对象的字符串表示形式 (控制当对象被转换为字符串时,应该返回什么样的内容)
    def __str__(self):  
        return self.name

	# user = models.User.objects.get(id=24)
	# 加上这个方法:返回:'py1'(id=24的name值)
	# 不加返回:User object (24)
  1. setting.py 中 INSTALLED_APPS 中添加新建的app
py 复制代码
INSTALLED_APPS = (
   	...
    'app',               # 添加此项
)
  1. 执行如下命令,创建表结构
c 复制代码
python3 manage.py makemigrations app # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate app   # 创建表结构

如果没有设置主键,Django 会自动添加一个 id 作为主键。

三、增删改查

1. 添加数据

c 复制代码
from app import models
def add_user(request):

	# 方法1:模型类实例化对象(返回值为None )
    user = models.User(name='python',age=18).save()

	# 方法2:通过 ORM 提供的 objects 提供的方法 create 来实现(推荐:返回值为 User object 可以通过 user.id 获取自增id值)
	user = models.User.objects.create(name='python',age=18)
	

2. 查询数据

c 复制代码
from app import models
def userList(request):
	
	# 获取所有数据
    response = models.User.objects.all()  # 返回 QuerySet 类型
    
    # 设置条件过滤
    response = models.User.objects.filter(id=1)  # 返回 QuerySet 类型
    response = models.User.objects.filter(pk=1)  # 都是返回主键为1的数据
    
    # exclude返回不满足条件的值
    response = models.User.objects.exclude(id=1) 
	
	# 获取单个对象
    response = models.User.objects.get(id=1) # 如果符合筛选条件的对象 超过了一个或者没有一个都会抛出错误
    
    # 限制返回的数据
	response = models.User.objects.order_by('name')[0:2]
	# order_by('name') 升序排列
	# order_by('-name') 降序排列 
	
	models.User.objects.all().order_by('age').reverse() # 将输出的结果反转,通常用于在已经排序的结果上进行反向排序
	
	models.User.objects.all().count() # 查询所有数据量 返回值为 int
	
	models.User.objects.all().first() # 返回所有数据的第一条数据 返回值为对象
	models.User.objects.all().last() # 返回所有数据的最后一条数据 返回值为对象 
	
	models.User.objects.filter(pk=1).exists() # 判断返回的 QuerySet 是否为空 返回值:True False
	
	user = models.User.objects.values("id","name","age")  # 用于查询部分字段的数据 返回是一个可迭代的字典序列
	print(user[0]) 输出: {'id': 24, 'name': 'py', 'age': 102}
	user = models.User.objects.values_list("id","name","age") # 返回值:一个个元组,元组里放的是查询字段对应的数据
	print(user[0]) 输出: (24, 'py', 102)
	user = models.User.objects.values_list("name").distinct() # 数据去重 一般是联合 values 或者 values_list 使用
	
	#filter() 方法基于双下划线的模糊查询(exclude 同理)
	models.User.objects.filter(age__gt=100) # 查询年龄大于100的数据 
	models.User.objects.filter(age__gte=100) #  # 查询年龄等于100的数据
	models.User.objects.filter(age__lt=100) # 查询年龄小于100的数据
	models.User.objects.filter(age__lte=100) # 查询年龄小于100的数据
	
	# 模糊查询
	models.User.objects.filter(name__contains='py') # 包含
	models.User.objects.filter(name__icontains='py') # 不区分大小写包含
	models.User.objects.filter(name__startswith='p') # 以指定字符开头
	models.User.objects.filter(name__endswith='1') # 以指定字符结尾
	models.User.objects.filter(created_at__year=2024) # 年月日查询
	models.User.objects.filter(created_at__month=10)
	models.User.objects.filter(created_at__day=01)

3. 修改数据

c 复制代码
from app import models
def userUpdate(request):
    
    # 方法1 模型类的对象.save() 返回值:None
	user = models.User.objects.filter(id=22).first()
    user.age = 100
    user.save()
	
	# 方式2:QuerySet 类型数据.update(字段名=更改的数据)(推荐) #返回值为 int 影响行数
	models.User.objects.filter(id=1).update(name='golang')
	

4. 删除数据

c 复制代码
from app import models
def userDel(request):
    
    # 方法1:使用模型类的对象.delete() 返回值:元祖,第一个元素为受影响的行数。(1, {'api.User': 1})(删除不存在的数据会报错)
    user = models.User.objects.filter(pk=8).first().delete()
	
相关推荐
HMBBLOVEPDX16 分钟前
MySQL的锁:
数据库·mysql
数据皮皮侠1 小时前
最新上市公司业绩说明会文本数据(2017.02-2025.08)
大数据·数据库·人工智能·笔记·物联网·小程序·区块链
小云数据库服务专线2 小时前
GaussDB数据库架构师修炼(十六) 如何选择磁盘
数据库·数据库架构·gaussdb
码出财富3 小时前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农4 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong5 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪5 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说10 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.14 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)14 小时前
KINGBASE集群日常维护管理命令总结
数据库·database