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()
二、定义模型
- Django 规定,如果要使用模型,必须要创建一个 app。
django-admin startapp app
- 修改 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)
- 在 setting.py 中 INSTALLED_APPS 中添加新建的app
INSTALLED_APPS = (...'app', # 添加此项
)
- 执行如下命令,创建表结构
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()