Django 通过 ORM 实现表的CRUD

单表的创建
  1. 修改 setting.py 文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
  1. 修改应用下面对应的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()
  1. 修改在与 setting.py 同级的目录下的 _ init_.py 文件
import pymysql

pymysql.install_as_MySQLdb()
  1. 执行以下脚本在应用下创建 migrations 包以及相应的类
python manage.py makemigrations
  1. 执行以下脚本会在数据库中创建 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的更多相关文章

  1. Django中ORM创建表关系

    一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...

  2. python——Django(ORM连表操作)

    千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...

  3. 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 ...

  4. Django之ORM跨表操作

    Django之ORM表查询及添加记录 一.创建表 - 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-man ...

  5. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

  6. django之orm单表查询

    这几天重新学习了一下django的orm,以此作为记录来分享. Part1:修改配置,生成表 在写数据和查数据之前,首先先得把django配置一下,具体配置如下: 1.先在公共项目的settings中 ...

  7. Python--day61--ORM介绍及Django使用ORM创建表

    ORM: 使用django的ORM详细步骤:(pymysql操作数据库:) #1,自己动手创建数据库(create database 数据库名字;) #2,在Django项目中(setting.py文 ...

  8. Django之ORM多表关系创建

    ORM模型多表逻辑创建: 以图书和作者关系模型为例: models.py from django.db import models ''' 一本书只能被一个出版社出版; 一个出版社可以出版多本书; 一 ...

  9. Django(ORM单表操作)

    默认使用sqllite数据库 修改为mysql数据库 创建数据库 在app models中编写创建数据库类 from django.db import models class Book(models ...

随机推荐

  1. QuartzCode快速开发动画代码工具

    QuartzCode快速开发动画代码工具 QuartzCode一款快速,轻量,强大的动画工具,可快速得到原生的ObjC/Siwft代码 我可以用QuartzCode做什么? 应用程序演练动画 动画菜单 ...

  2. unittest断言

    assertEquals(expected,actual,msg=msg)    # 判断 expected,actual是否一致,msg类似备注,可以为空

  3. 百万年薪python之路 -- 前端CSS基础介绍

    一. CSS介绍 CSS定义 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 语法结构 div{ color: green ...

  4. maven的相关操作及常见问题

    mvn本地服务nexus3的搭建 下载 下载nexus 官网速度极慢,下面是我下好上传的大家可以下载使用链接:https://pan.baidu.com/s/1Ji5Orv3moXc60HRQ39y6 ...

  5. dubbo集成zookeeper rpc远程调用

    注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...

  6. SpringMVC重点知识总结

    SpringMVC总结 1. SpringMVC简介 MVC即模型-视图-控制器(Model-View-Controller) Spring Web MVC是一种基于Java的实现了Web MVC设计 ...

  7. node-批量上传文件

    很多项目可能都会涉及到的业务是关于多文件上传的,那么需要使用到redis或者第三方库(使用redis)来实现任务队列,甚至需要控制并发量和分包(一次请求传多个文件),这样每次都会以实现功能来完成,但是 ...

  8. windows下搭建开发环境

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...

  9. windows 360浏览器打开网站白屏

    1.场景 使用windows的360浏览器打开网页白屏 使用mac 谷歌,360,火狐浏览器打开均正常 2.原因 windows浏览器默认使用的是ie浏览器内核渲染的,js执行时发生错误 3.添加he ...

  10. Java设计模式:23种设计模式

    1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则——面向对象设计原则 5. 里氏替换原则——面向对象设计原则 6. 依赖倒置 ...