191024DjangoORM之单表操作
一、ORM基础
- ORM:object relation mapping 对象关系映射表
1、配置连接MySQL
- settings.py:将默认配置删除,加入以下配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Djangoorm', #数据库名称
'USER': 'dongfei', #数据库用户名
'PASSWORD': 'dongfei', #数据库密码
'HOST': '192.168.56.101', #数据库主机,留空默认为localhost
'PORT': '3306', #数据库端口
}
}
2、初始化数据库和创建表
- app/models.py
class Book(models.Model): #不写id字段Django会自动给加一个id字段,并且会将此字段设置为主键、自增长
name = models.CharField(max_length=30)
price = models.FloatField()
pub_date = models.DateField()
author = models.CharField(max_length=20,null=False)
- 以下命令在cmd执行
>pip3 install mysqlclient
>python manage.py makemigrations
>python manage.py migrate
二、数据的增删改
1、插入数据
- 方式一
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
b = Book(name="呐喊",price=38.8,author="鲁迅",pub_date="1923-08-01")
b.save()
return HttpResponse("添加成功")
- 方式二(推荐)
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
Book.objects.create(name="彷徨",price=58.8,author="鲁迅",pub_date="1926-08-01")
return HttpResponse("添加成功")
2、修改数据
- 方式一(推荐)
def update(request):
Book.objects.filter(name="呐喊").update(price=48.88)
return HttpResponse("修改成功")
- 方式二
def update(request):
b = Book.objects.get(name="彷徨")
b.price = 38.88
b.save()
return HttpResponse("修改成功")
补充:打印SQL语句日志,在settings.py中加入以下代码
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
3、删除数据
def delbook(request):
Book.objects.filter(name="呐喊").delete()
return HttpResponse("删除成功")
三、单表记录的查询
- 单表查询
def select(request):
book_list = Book.objects.filter(id=1) #拿到的是一个集合
book_list = Book.objects.exclude(id=2) #排除id=2的记录,和filter相反
book_list = Book.objects.get(id=1) #拿到的是一个对象
book_list = Book.objects.all()[:3] #取所有的记录,支持列表切片操作
book_list = Book.objects.first() #取第一条记录
book_list = Book.objects.last() #取最后一条记录
book_list = Book.objects.filter(author="余华").values("name","price") #具体取某个字段,返回字典
book_list = Book.objects.filter(author="余华").values_list("name","price") #具体取某个字段,返回元组
book_list = Book.objects.all().values("name").distinct() #去重
book_list = Book.objects.all().order_by("price") #排序
book_list = Book.objects.all().order_by("price").reverse() #反向排序
book_list = Book.objects.all().order_by("price").count() #统计
book_list = Book.objects.filter(price__gt=30).values("name","price") #查询价格大于30的
book_list = Book.objects.filter(name__icontains="小") #查询书名中包含”小“的书籍
return render(request,'index.html',{"book_list": book_list})
- 单表查询的模糊匹配
Book.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
Book.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
Book.objects.filter(id__in=[11, 22, 33]) # not in
Book.objects.filter(name__contains="小") #包含
Book.objects.filter(name__icontains="小") # icontains大小写不敏感
Book.objects.filter(id__range=[1, 2]) # 范围bettwen and
191024DjangoORM之单表操作的更多相关文章
- 学习MySQL之单表操作(二)
##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...
- c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)
一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...
- Hibernate单表操作
单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是seque ...
- Django学习笔记(7)——单表操作和多表操作
单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...
- web框架开发-Django模型层(1)之ORM简介和单表操作
ORM简介 不需要使用pymysql的硬编码方式,在py文件中写sql语句,提供更简便,更上层的接口,数据迁移方便(有转换的引擎,方便迁移到不同的数据库平台)…(很多优点),缺点,因为多了转换环节,效 ...
- Django模型层-单表操作
ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- python 全栈开发,Day71(模型层-单表操作)
昨日内容回顾 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} {% ...
- Django单表操作
一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...
- Django之模型层(单表操作)
一.ORM简介 MVC和MTV框架中包含一个重要部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库. ORM是‘对象-关系- ...
随机推荐
- react 兼容 ie11
npm install core-js -D 在入口文件第一行引入import ‘core-js’ 在package.json做如下修改 加上ie 11
- Java高并发程序设计学习笔记(二):多线程基础
转自:https://blog.csdn.net/dataiyangu/article/details/86226835# 什么是线程?线程的基本操作线程的基本操作新建线程调用run的一种方式调用ru ...
- 使用redislive监控redis
redis监控工具redislive的安装 1. pip安装 如果主机没有pip先安装pip工具 wget --no-check-certificate https://github.com/pypa ...
- 韦东山嵌入式Linux学习笔记04--点亮开发板的一个LED灯
搜索开发板原理图LED的走线 LED8是网线接口的指示灯. 在这里我们尝试用汇编代码控制D10, 也就是LED1,它连接到EINT4/GPF4,读取芯片手册 有原理图可知,如果需要 ...
- 月薪 30K Java 程序员,需要掌握哪些技术?
转载自:Java3y 1-5年的Java程序员,薪资区间大致是在15-25K左右,那有没有可能提前达到30K的薪资呢?有人说这只能是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业 ...
- Charles中使用Rewrite提高测试效率
上次给大家演示了Charles中通过Map Local功能来提高测试效率,Charles还有另外一个强大的功能,Rewrite,这次也给大家演示一下. Charles中的Rewrite功能非常强大,可 ...
- Laying out a webpage is easy with flex
Flex写起来省劲很多,只用加上flex-wrap:wrap在container上.Html5 playground
- 多态(Polymorphism)的实现机制
1. 我理解的广义的 override 是指抛开各种访问权限,子类重定义(redefine)父类的函数(即函数签名相同). 2. C++中的三个所谓的原则:never redefine base cl ...
- jmeter解析response里的json对象和数组
1.解析提取json对象 2.解析提取json数组 注意,标红这里是从0开始计数 提取最后一个数组
- hihocoder1384/CH0601 Genius ACM[贪心+倍增+归并排序]
提交地址. 关于lyd给的倍增方法,即从当前枚举向后的$2^k$长度($k$从$1$开始),如果可行就将$k$加一以扩大范围,不可行时将范围不断减半直至$0$. 举个例子,假设当下在1,目标答案是13 ...