欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Django ORM 单表操作

Django ORM 单表操作

2025/10/12 5:42:19 来源:https://blog.csdn.net/weixin_38667984/article/details/147224346  浏览:    关键词:Django ORM 单表操作

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

文章目录

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


一、mysql 配置

# 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。
django-admin startapp app
  1. 修改 django_project/app/models.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
INSTALLED_APPS = (...'app',               # 添加此项
)
  1. 执行如下命令,创建表结构
python3 manage.py makemigrations app # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate app   # 创建表结构

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

三、增删改查

1. 添加数据

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. 查询数据

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() # 查询所有数据量 返回值为 intmodels.User.objects.all().first() # 返回所有数据的第一条数据 返回值为对象models.User.objects.all().last() # 返回所有数据的最后一条数据 返回值为对象 models.User.objects.filter(pk=1).exists() # 判断返回的 QuerySet 是否为空 返回值:True Falseuser = 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. 修改数据

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

4. 删除数据

from app import models
def userDel(request):# 方法1:使用模型类的对象.delete() 返回值:元祖,第一个元素为受影响的行数。(1, {'api.User': 1})(删除不存在的数据会报错)user = models.User.objects.filter(pk=8).first().delete()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词