django中对数据库的增删改查
Django的配置文件时settings.py中的
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], 只修改这一个
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] 对数据库进行增 删 改 查
在当前的文档的views.py中的
class RegisterView(View):
def get(self, request):
1 增加
book = BookInfo(
btitle='天涯明月刀',
bpub_date=date(1999, 12, 12),
bread=30,
bcomment=10
)
book.save() HeroInfo.objects.create(
hname='叶开',
hgender=0,
hcomment='小李飞刀',
hbook=book
)
2 查询
try:
基本查询
查询所有的书名
books = BookInfo.objects.all()
print(books)
book = BookInfo.objects.get(id=1)
book = BookInfo.objects.get(pk=1)
book = BookInfo.objects.get(id=100)
print(book)
print(BookInfo.objects.count()) 过滤查询
相等
print(BookInfo.objects.filter(id__exact=1))
print(BookInfo.objects.filter(id=1)) 模糊查询
print(BookInfo.objects.filter(btitle__contains='刀'))
print(BookInfo.objects.filter(btitle__endswith='刀'))
print(BookInfo.objects.filter(btitle__startswith='天'))
以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith. 空查询
print(BookInfo.objects.filter(btitle__isnull=False))
print(HeroInfo.objects.filter(hcomment__isnull=False)) 范围查询
print(BookInfo.objects.filter(id__in=[1, 3, 5]))
print(HeroInfo.objects.filter(id__in=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19])) 比较查询
print(BookInfo.objects.filter(id__gt=3))
print(BookInfo.objects.exclude(id__gt=3)) 日期查询
print(BookInfo.objects.filter(bpub_date__year=1980))
print(BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))) F 对象 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。
查询阅读量大于等于评论量的图书。
print(BookInfo.objects.filter(bread__gte=F('bcomment')))
查询阅读量大于等于评论量2倍的图书。
print(BookInfo.objects.filter(bread__gte=F('bcomment')*2)) Q 对象
多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。
print(BookInfo.objects.filter(bread__gt=20,id__lt=3))
print(BookInfo.objects.filter(bread__gt=20).filter(id__lt=3))
如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。
查询阅读量大于20的图书,改写为Q对象如下。
print(BookInfo.objects.filter(Q(bread__gt=20)))
Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
print(BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3)))
Q对象前可以使用~操作符,表示非not 查询编号不等于3的图书。
print(BookInfo.objects.filter(~Q(pk=3))) 聚合函数
使用aggregate()过滤器调用聚合函数。聚合函数包括:
Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。
查询图书的总阅读量。
print(BookInfo.objects.aggregate(Sum('bread'))) 排序
使用order_by对结果进行排序
print(BookInfo.objects.all().order_by('bread')) # 升序
print(BookInfo.objects.all().order_by('-bread')) # 降序 关联查询
由一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set 例:
print(BookInfo.objects.get(id=1).heroinfo_set.all())
由多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名 例:
print(HeroInfo.objects.get(id=1).hbook)
访问一对应的模型类关联对象的id语法:多对应的模型类对象.关联类属性_id
print(HeroInfo.objects.get(id=1).hbook_id) 关联过滤查询
由多模型类条件查询一模型类数据:
查询图书,要求图书英雄为"孙悟空"
print(BookInfo.objects.filter(heroinfo__hname='孙悟空'))
查询图书,要求图书中英雄的描述包含"八"
print(BookInfo.objects.filter(heroinfo__hcomment__contains='八'))
由一模型类条件查询多模型类数据:
查询书名为“天龙八部”的所有英雄。
print(HeroInfo.objects.filter(hbook__btitle='天龙八部'))
查询图书阅读量大于30的所有英雄
print(HeroInfo.objects.filter(hbook__bread__gt=30)) 3 修改(修改更新有两种方法)
save 修改模型类对象的属性,然后执行save()方法
hero = HeroInfo.objects.get(hname='猪悟能')
hero.hname='猪八戒'
hero.save()
hero = HeroInfo.objects.get(hname='孙悟空')
hero.hname = '孙行者'
hero.hcomment = '七十二变'
hero.save()
update 使用模型类.objects.filter().update(),会返回受影响的行数
HeroInfo.objects.filter(hname='沙悟净').update(hname='沙和尚') 4 删除(删除有两种方法)
1)模型类对象delete
HeroInfo.objects.get(id=13).delete()
2)模型类.objects.filter().delete()
HeroInfo.objects.filter(id=14).delete() 查询集 QuerySet 查询集,也称查询结果集、QuerySet,
表示从数据库中获取的对象集合。
当调用如下过滤器方法时,Django会返回查询集
(而不是简单的列表):all():返回所有数据。filter():返回满足条件的数据。
exclude():返回满足条件之外的数据。order_by():对结果进行排序。
对查询集可以再次调用过滤器进行过滤,如
print(BookInfo.objects.filter(bread__gt=30).order_by('bpub_date')) 测试自定义的管理器
print(BookInfo.books.all()) book = BookInfo.books.create_book('aabc', date(1988, 1, 1)) except Exception as e:
print("出错了") response = HttpResponse("register get page")
return response def post(self, request):
response = HttpResponse("register post page")
return response
django中对数据库的增删改查的更多相关文章
- Android中Sqlite数据库进行增删改查
今天这篇文章写Sqlite数据库,通过一个小案例来完整讲一下数据库常见的CRUD操作. 先对知识点总结: SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHel ...
- java程序设计课期中考试——数据库的增删改查和简单的js界面
首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他 ...
- Django中多表的增删改查操作及聚合查询、F、Q查询
一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...
- 在java中对数据库进行增删改查
1.java连接MySql数据库 代码区域: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- Django 自带的ORM增删改查
通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...
- TP5.1:数据库的增删改查操作(基于面向对象操作)
我们现实中对数据库的增删改查操作,都是使用模型类进行操作的(表名::),也就是面向对象操作,只有底层的代码用的是数据库操作(Db::table('表名')) 下面我将贴出模型类进行的增删改查操作,通过 ...
- django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面
1.为test.DB数据库预先创建下面数据 1 张三 16 2015-01-02 12 李四 17 2015-01-04 13 王五 14 ...
- Django基础学习四_数据库的增删改查
今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...
随机推荐
- 常用到的简单命令 Sublime Git NPM WindowsCMD MacTerminal(Unix命令) Vim
sublime 选择标签及其内容 ctrl+shift+a连续按两次 调出Package console: Mac: command + shift + p 安装插件: 1.调出 Package co ...
- xml-treeview转换
XML——>treeciew using System; using System.Collections.Generic; using System.Text; using System.Wi ...
- 听说是个集成版的监控,不知道你听过没? C+C+N
Cnyunwei-Cacti+Nagios 下载地址1:http://pan.baidu.com/s/1mgn1rsc 下载地址2:http://sourceforge.net/projects/cn ...
- 关闭TCP中135、139、445、593、1025 等端口的操作方法 (转)(记录下)
操作要领:封闭端口,杜绝网络病毒对这些端口的访问权,以保障计算机安全,减少病毒对上网速度的影响. 近日发现有些人感染了新的网络蠕虫病毒,该病毒使用冲击波病毒专杀工具无法杀除,请各位尽快升级计算机上的杀 ...
- asp.net 服务器控件的 ID,ClientID,UniqueID 的区别
1.简述 ID是设计的时候自己所指定的ID,是我们分配给服务器控件的编程标识符,我们常常使用this.controlid来寻找控件,那么这个controlid就是这里所说的ID. ClientID是由 ...
- 面向对象进阶------>内置函数 str repr new call 方法
__new__方法: 我们来讲个非常非常重要的内置函数和init一样重要__new__其实在实例话对象的开始 是先继承父类中的new方法再执行init的 就好比你生孩子 先要把孩子生出来才能对孩子 ...
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- 【Git】创建一个空分支
1 创建一个分支 使用参数 --orphan,这个参数的主要作用有两个,一个是拷贝当前所在分支的所有文件,另一个是没有父结点,可以理解为没有历史记录,是一个完全独立背景干净的分支. 参考git的帮助文 ...
- 乘风破浪:LeetCode真题_020_Valid Parentheses
乘风破浪:LeetCode真题_020_Valid Parentheses 一.前言 下面开始堆栈方面的问题了,堆栈的操作基本上有压栈,出栈,判断栈空等等,虽然很简单,但是非常有意义. 二.Valid ...
- Vmstat主要关注哪些数据?
除特殊情况外,一般关注飘红部分 任务的信息(procs) r(running) 在internal时间段里,运行队列中的进程数,即表示正在运行或者正在等待CPU时间的进程数,如果这个参数值超过服务器上 ...