Django 通过 ORM 实现表的CRUD
Django 通过 ORM 实现表的CRUD
单表的创建
- 修改 setting.py 文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
- 修改应用下面对应的models.py 文件
class Book(models.Model):
nid = models.AutoField(primary_key=True) # 表ID 自增主键
title = models.CharField(max_length=32) # 字符串,最大长度为32
price = models.DecimalField(max_digits=8, decimal_places=2) # 小数,最多8位,小数点最多2位
publish = models.CharField(max_length=32)
pub_date = models.DateTimeField()
- 修改在与 setting.py 同级的目录下的 _ init_.py 文件
import pymysql
pymysql.install_as_MySQLdb()
- 执行以下脚本在应用下创建 migrations 包以及相应的类
python manage.py makemigrations
- 执行以下脚本会在数据库中创建 INSTALLED_APPS 中所有对应的数据表
python manage.py migrate
Django 数据的插入(PS:要先完成表的生成)
- 修改 urls.py 文件
from django.contrib import admin
from django.urls import path
from vedio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('add/', views.add),
]
- 修改 views.py 文件
from django.shortcuts import render,HttpResponse,redirect
from vedio.models import Book
def add(request):
# 方法一
"""
book = Book(title="Django", price=123, pub_date="2019-10-06", publish="人民出版社")
book.save()
"""
# 方法二
Book.objects.create(title="Think PHP", price=123, pub_date="2019-10-06", publish="人民出版社")
# 方法三
"""
Book.objects.create(**request.POST.dict())
PS:request.POST 要删除 {{ csrf-token }} 引进了的变量
"""
return HttpResponse("OK")
Django 数据的查询,删除,修改
- 修改 views.py 文件
from django.shortcuts import render,HttpResponse,redirect
from vedio.models import Book
def books(request):
# books = Book.objects.all() # 返回所有记录
books = Book.objects.filter(title="Think PHP") # 查询标题等于 Think PHP的所有记录
# Book.objects.filter(title="Think PHP").delete() # 删除标题为 Think PHP的所有条记录
# Book.objects.filter(nid=1).update(price=120) # 更新 nid=1 这条数据的price
return render(request, "books.html", locals())
- 修改 urls.py 文件
from django.contrib import admin
from django.urls import path
from vedio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('books/', views.books),
]
Django 查询深入
from django.shortcuts import render,HttpResponse,redirect
from vedio.models import Book
def books(request):
# all()
# books = Book.objects.all() # 返回所有记录
# filter()
# books = Book.objects.filter(title="Think PHP") # 查询标题等于 Think PHP的所有记录
# books = Book.objects.filter(title="Think PHP", nid=2) # 查询标题等于 Think PHP 并且 nid = 2 的所有记录
# get()
# books = Book.objects.get(title="Think PHP") # 查询标题等于 Think PHP 的一条记录,大于1条或1条都没有将报错
# first() last()
# books = Book.objects.all().first() # 返回 queryset 的第一个 model 对象
# books = Book.objects.all().last() # 返回 queryset 的最后一个 model 对象
# exclude()
# books = Book.objects.exclude(title="Django") # 查询 title 不等于 Django 的 querySet
# order_by()
# books = Book.objects.all().order_by('price') # 根据price 升序
# books = Book.objects.all().order_by('-price') # 根据price 降序
# count()
# books_num = Book.objects.all().count() # 返回书籍的个数
# reverse()
# books = Book.objects.all().reverse() # 逆序
# exits()
# is_exits = Book.objects.all().exists() # 判断数据表是否有数据
# values()
# ret = Book.objects.all().values('title', 'price') # 取 title price 的数据,返回一个列表,列表里面的数据是字典
# values_list()
# ret = Book.objects.all().values_list('title', 'price') # 取 title price 的数据,返回一个列表,列表里面的数据是元组
# distinct()
# books = Book.objects.all().values("title").distinct() # 对 title 中的数据进行去重
# __gt __lt __gte __lte
# books = Book.objects.filter(price__gt=200) # 查询 price 大于200 的数据
# books = Book.objects.filter(price__gte=200) # 查询 price 大于等于200 的数据
# books = Book.objects.filter(price__lt=200) # 查询 price 小于200 的数据
# books = Book.objects.filter(price__lte=200) # 查询 price 小于等于200 的数据
# __startswith __istartswith __contains __icontains
# books = Book.objects.filter(title__startswith="Think") # 查询 title 以 Think 开头的数据
# books = Book.objects.filter(title__istartswith="think") # 查询 title 以 Think 开头的数据,不区分大小写
# books = Book.objects.filter(title__contains="Think") # 查询 包含 Think 的数据
return render(request, "books.html", locals())
Django 一对多表的创建
- 修改应用下的models.py 文件
from django.db import models
class Book(models.Model):
nid = models.AutoField(primary_key=True) # 表ID 自增主键
title = models.CharField(max_length=32) # 字符串,最大长度为32
price = models.DecimalField(max_digits=8, decimal_places=2) # 小数,最多8位,小数点最多2位
pub_date = models.DateTimeField()
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE) # on_delete=models.CASCADE 指定级联删除
class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
email = models.CharField(max_length=32, null=True) # null=True表示该字段可以为空
Django 多对多表的创建
- 修改应用下的 models.py 文件
from django.db import models
class Book(models.Model):
nid = models.AutoField(primary_key=True) # 表ID 自增主键
title = models.CharField(max_length=32) # 字符串,最大长度为32
price = models.DecimalField(max_digits=8, decimal_places=2) # 小数,最多8位,小数点最多2位
pub_date = models.DateTimeField()
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE) # on_delete=models.CASCADE 指定级联删除
authors = models.ManyToManyField(to="Author") # 指定多对多
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
email = models.CharField(max_length=32)
Django 一对一表的创建
- 修改应用下的 models.py 文件
from django.db import models
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
email = models.CharField(max_length=32)
ad = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE)
class AuthorDetail(models.Model):
addr = models.CharField(max_length=32)
tel = models.IntegerField()
Django 一对多数据的插入
Book.objects.create(title="Python")
Django 多对多数据的插入
book = Book.objects.create(title="Django")
# 方法一
zp = Author.objects.filter(name="zp").first()
mcx = Author.objects.filter(name="mcx").first()
book.authors.add(zp, mcx)
# 方法二
book.authors.add(1, 2)
# 方法三
book.authors.add(*[1, 2])
Django 多对多数据的解除绑定
book = Book.objects.filter(title="Django").first()
mcx = Author.objects.filter(name="mcx").first()
book.authors.remove(mcx) # 删除 与 book 关联的 mcx
book.authors.clear() # 删除 与 book 关联的所有作者
Django 多对多数据的解除再绑定
book = Book.objects.filter(title="Django").first()
# 方法一
book.authors.clear()
book.authors.add(1)
# 方法二
book.authors.set(1)
Django 通过 ORM 实现表的CRUD的更多相关文章
- Django中ORM创建表关系
一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...
- python——Django(ORM连表操作)
千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...
- ORM以及Django使用ORM创建表
day61 2018-04-28 1. 内容回顾 1. HTTP协议消息的格式: 1. 请求(request) 请求方法 路径 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n ...
- Django之ORM跨表操作
Django之ORM表查询及添加记录 一.创建表 - 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-man ...
- python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)
12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...
- django之orm单表查询
这几天重新学习了一下django的orm,以此作为记录来分享. Part1:修改配置,生成表 在写数据和查数据之前,首先先得把django配置一下,具体配置如下: 1.先在公共项目的settings中 ...
- Python--day61--ORM介绍及Django使用ORM创建表
ORM: 使用django的ORM详细步骤:(pymysql操作数据库:) #1,自己动手创建数据库(create database 数据库名字;) #2,在Django项目中(setting.py文 ...
- Django之ORM多表关系创建
ORM模型多表逻辑创建: 以图书和作者关系模型为例: models.py from django.db import models ''' 一本书只能被一个出版社出版; 一个出版社可以出版多本书; 一 ...
- Django(ORM单表操作)
默认使用sqllite数据库 修改为mysql数据库 创建数据库 在app models中编写创建数据库类 from django.db import models class Book(models ...
随机推荐
- QuartzCode快速开发动画代码工具
QuartzCode快速开发动画代码工具 QuartzCode一款快速,轻量,强大的动画工具,可快速得到原生的ObjC/Siwft代码 我可以用QuartzCode做什么? 应用程序演练动画 动画菜单 ...
- unittest断言
assertEquals(expected,actual,msg=msg) # 判断 expected,actual是否一致,msg类似备注,可以为空
- 百万年薪python之路 -- 前端CSS基础介绍
一. CSS介绍 CSS定义 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 语法结构 div{ color: green ...
- maven的相关操作及常见问题
mvn本地服务nexus3的搭建 下载 下载nexus 官网速度极慢,下面是我下好上传的大家可以下载使用链接:https://pan.baidu.com/s/1Ji5Orv3moXc60HRQ39y6 ...
- dubbo集成zookeeper rpc远程调用
注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...
- SpringMVC重点知识总结
SpringMVC总结 1. SpringMVC简介 MVC即模型-视图-控制器(Model-View-Controller) Spring Web MVC是一种基于Java的实现了Web MVC设计 ...
- node-批量上传文件
很多项目可能都会涉及到的业务是关于多文件上传的,那么需要使用到redis或者第三方库(使用redis)来实现任务队列,甚至需要控制并发量和分包(一次请求传多个文件),这样每次都会以实现功能来完成,但是 ...
- windows下搭建开发环境
PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...
- windows 360浏览器打开网站白屏
1.场景 使用windows的360浏览器打开网页白屏 使用mac 谷歌,360,火狐浏览器打开均正常 2.原因 windows浏览器默认使用的是ie浏览器内核渲染的,js执行时发生错误 3.添加he ...
- Java设计模式:23种设计模式
1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则——面向对象设计原则 5. 里氏替换原则——面向对象设计原则 6. 依赖倒置 ...