一、Django的ORM简介
1. ORM概念:对象关系映射(Object Relational Mapping);
2. ORM优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
django模型映射关系
模型类--------> 数据表
类属性--------->表字段名
1. 模型类必须都写在app下的models.py文件中;
2. 模型如果需要映射到数据库,坐在的app唏嘘被安装;
3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性。
二、数据库连接配置
1. 在settings.py中配置DATABASES
DATABASES = {
‘default’: {
'NEGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'mydb', # 数据库名称
'USER': 'admin', # 链接数据库的用户名
'PASSORD': 'qwe123', # 链接数据库的密码
'HOST': '127.0.0.1', # mysql服务器的域名和ip地址
'PORT': '3306', # mysql的一个端口号,默认是3306
}
}
创建一个管理员用户liuxinghua账号,密码为qwe123:
CREATE USER 'liuixnghua' @‘%’IDENTIFIED BY 'qwe123‘;
给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON *,* TO 'liuxinghua'@'%';
使授权立即生效:
FLUSH PRIVILEGES;
2. pymysql数据库连接器的配置:
① 在虚拟环境中安装pymysql:pip install pymysql -i https://pypi.douban.com/simple
② 设置连接器为pymysql:在主目录下的__init__.py文件添加下面语句
import pymysql
pymysql.install_as_MySQLdb()
补充:
create database maqushop; 创建数据库
drop database maqushop; 删除数据库
三、模型的创建与映射
1. 创建模型
在App article中的models.py文件中进行模型定义
from django.db import models class Article(models.Model): title = models.CharField(max_length=200, default="") author = models.CharField(max_length=50, default="") summary = models.CharField(max_length=1000, default="") content = models.TextField()
2. 激活模型
注:
在主项目文件下的__init__.py文件中进行pymysql连接器设置
1 2 | import pymysql pymysql.install_as_MySQLdb() |
① 注册app:在主项目settings.py文件中对INSTALLED_APPS添加app(article)
1 2 3 4 5 6 7 8 9 | INSTALLED_APPS = [ 'django.contrib.admin' , 'django.contrib.auth' , 'django.contrib.contenttypes' , 'django.contrib.sessions' , 'django.contrib.messages' , 'django.contrib.staticfiles' , 'article' , ] |
② 生成迁移文件,cmd中在项目文件目录下,输入python manage.py makemigrations 即可创建app article的迁移文件,再次输入python manage.py migrate,即可保存生成的迁移文件使其生效。
python manage.py migrate # 让全部app迁移生效
python manage.py migrate article # 让article app迁移生效
四、数据的增删改查
准备
1. 打开python交互模式,cmd项目文件目录下输入 python manage.py shell,即可进入python交互模式
增
1. 第一种
s1 = Student(name='liuxinghua1', age=37, qq=416439533) #直接实例化进行数据添加
s1.save() # 进行实例化数据保存
2. 第二种
s2 = Student()
s2.name='liuxinghua2'
s2.age=37
s2.sex=1
s2.qq='416439533'
s2.save()
3. 第三种
Student.object.create(name='liuxinghua3', age=37, qq=416439533)
4. 第四种
s3 = Student.objects.get_or_create(name='liuxinghua4', age=37, sex=1, qq=416439533)
查
1. 在查询之前便于更好识别数据,需要在models.py文件中Student类定义下添加一个函数
def __str__(self):
return self.name
res = Student.objects.all()
res 或者 print(res.query)
2. 查一条
Student.objects.get(pk=1) #如符合条件有多条,报错 pk为主键,此处主键为编号
3. 带条件查询
Student.objects.filter(sex=1)
总结:
get拿到是一个对象
all,filter拿到的是查询集,queryset[]
Queryset集合对象:可以用list转成列表,可以迭代,可以切片(不支持负索引)
改
1. 该单条,通过属性修改
s1 = Student.objects.get(pk=1) # 首先获取数据
s1.age = 18 # 此次对数据进行修改
s1.save # 最后对修改数据进行保存
2. 改多条,通过update
Student.objects.filter(name='uxinghua‘.update(age=20) # 通过刷选修改对应项目的属性数据
Out[17]:2 # 修改数据的条数,表示有两条数据符合刷选并进行了修改
删
1. delete直接删除
单条删除
s = Student.objects.get(pk=1) # 首先获取数据
s.delete() # 直接删除
刷选删除
s = Student.objects.filter(name=‘liuxinghua') # 首先获取数据
s.delete() # 直接删除
全部删除
s = Student.objects.all() # 首先获取数据
s.delete() # 直接删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理