一、Django的ORM简介
1. ORM系统
概念:对象关系映射(Object Relational Mapping,简称ORM)
优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
2. django模型映射关系
① 模型类必须都写在app下的modles.py文件中
② 模型如果需要映射到数据库,所在的app必须被安装
③ 一个数据表对应一个模型类,表中的字段,对应模型中的类属性
二、数据库连接配置
1. 在setting.py中配置DATABASES
虚拟环境首次安装pymysql后,进入mysql采用 mysql -uadmin -pqwe123 进入mysql中(可能是因为在setting.py文件中的配置信息在安装pymysql后直接进行对应信息建立)
创建一个管理员用户lxinghua账号,密码123456:
CREATE USER 'lxinghua'@'%'IDENTIFIED BY '123456';
给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON *.* TO 'moran'@'%';
使授权立即生效:
FLUSH PRIVILEGES;
2. pymysql数据库连接器的配置:
① 在虚拟环境中安装pymysql: pip install pymysql -i https://pypi.douban.com/simple
② 设置连接器为pymysql:
在主目录__init__.py文件添加以下两行代码:
# __init__.py文件
import pymysql pymysql.install_as_MySQLdb()
三、模型的创建与映射
1. 在app下面的models.py中创建django的模型类:
注:__str__方法是为了在输出对应查询信息是显示具体信息,而非QuerySet的键信息。
无__str__方式时输出信息:
有__str__方式时输出信息:
2. 将模型类映射到数据库:
① 首先执行以下命令,要创建映射文件
python manage.py makemigrations [app name]
注:命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行。
② 执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate [app name]
注: 在执行以上命令前,要保证我们创建模型的app是已经注册过的app。
执行完以上命令后,在数据库中可以查询到创建的以app名_模型名的数据表,二其他的一些表格是django自动生成的。
注: 如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除。
若在pycharm中,则选择Tools->Run manage.py Task...,进入manage.py@Diango22 > 运行界面,执行makemigrations [app name] 无报错后,在执行migrate [app name] 即可实现数据库中对应数据表的创建。
四、数据的增删改查
1. 增加数据
在视图函数中导入User模型类,然后使用下面的方法添加数据
from .models import User def add_user(request): # 方法一 taka = User(name='taka', age=18) taka.save() # 方法二 xiaopo = User() xiaopo.name = 'xiaopo' xiaopo.age = 18 xiaopo.save() # 方法三 User.objects.create(name='xiaoming', age=20) # 方法四 User.objects.get_or_create(name='xiaohong', age=21) return HttpResponse('插入数据成功!')
2. 查找数据
在视图函数中导入User模型类,实现简单的查找
from .models import User def search_user(request): # 查询所有记录对象 rs = User.objects.all() # 查询一个记录对象 rs = User.objects.get(id=1) # 获取满足条件的对象 rs = User.objects.filter(name='xiaoming') print(rs) return HttpResponse('查询数据成功!')
注:数据库相关的接口(QuerySet API)
① 从数据库总查询出来的结果一般是一个集合,这个集合叫做QuerySet
② QuerySet是可迭代对象
③ QuerySet支持切片,不支持复索引
④ 可以用list强行将QuerySet变成列表
3. 修改数据
在视图函数中导入User模型类,然后使用下面的方法更新数据
from .models import User def update_user(request): # 先查询到再属性赋值修改 rs = User.objects.get(name='xiaoming') rs.name = 'Xiaoming' # 简单的变更首字母大小写 rs.save() # 使用update方法直接修改 User.objects.filter(name='Xiaoming').update(name='XM') User.objects.all().update(city="wuhan") return HttpResponse("更新数据成功!")
4. 删除数据
在视图函数中导入User模型类,然后使用下面的方法删除数据
from .modles import User def delete_user(request): User.objects.get(id=1).delete() User.objects.filter(age=18).delete() User.objects.all().delete() return HttpResponse("删除数据成功!")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理