django中数据库操作有关部分
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 创建数据库
create
database
django_demo
default
charset = utf8; # 定义django中的model模型
from django.db import models # 定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name='名称')
bpub_date = models.DateField(verbose_name='发布日期')
bread = models.IntegerField(default=0, verbose_name='阅读量')
bcomment = models.IntegerField(default=0, verbose_name='评论量')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta:
db_table = 'tb_books' # 指明数据库表名
verbose_name = '图书' # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称 def __str__(self):
"""定义每个数据对象的显示信息"""
return self.btitle # 定义英雄模型类HeroInfo
class HeroInfo(models.Model):
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # 外键
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name def __str__(self):
return self.hname python
manage.py
makemigrations
python
manage.py
migrate # 添加测试数据
insert
into
tb_books(btitle, bpub_date, bread, bcomment, is_delete)
values
('射雕英雄传', '1980-5-1', 12, 34, 0),
('天龙八部', '1986-7-24', 36, 40, 0),
('笑傲江湖', '1995-12-24', 20, 80, 0),
('雪山飞狐', '1987-11-11', 58, 24, 0); insert
into
tb_heros(hname, hgender, hbook_id, hcomment, is_delete)
values
('郭靖', 1, 1, '降龙十八掌', 0),
('黄蓉', 0, 1, '打狗棍法', 0),
('黄药师', 1, 1, '弹指神通', 0),
('欧阳锋', 1, 1, '蛤蟆功', 0),
('梅超风', 0, 1, '九阴白骨爪', 0),
('乔峰', 1, 2, '降龙十八掌', 0),
('段誉', 1, 2, '六脉神剑', 0),
('虚竹', 1, 2, '天山六阳掌', 0),
('王语嫣', 0, 2, '神仙姐姐', 0),
('令狐冲', 1, 3, '独孤九剑', 0),
('任盈盈', 0, 3, '弹琴', 0),
('岳不群', 1, 3, '华山剑法', 0),
('东方不败', 0, 3, '葵花宝典', 0),
('胡斐', 1, 4, '胡家刀法', 0),
('苗若兰', 0, 4, '黄衣', 0),
('程灵素', 0, 4, '医术', 0),
('袁紫衣', 0, 4, '六合拳', 0); python
manage.py
shell
from booktest.models import BookInfo, HeroInfo # 查询标号为1的图书
BookInfo.objects.filter(id__exact=1)
BookInfo.objects.filter(id=1) BookInfo.objects.get(id=1) # 模糊查询包含
BookInfo.objects.filter(btitle__contains="传") # 制定开头和结尾
BookInfo.objects.filter(btitle__endswith='部')
BookInfo.objects.filter(btitle__startswith='雪') # 查询书名不为空的图书
BookInfo.objects.filter(btitle__isnull=False)
BookInfo.objects.filter(btitle__isnull=True) # 范围查询
BookInfo.objects.filter(id__in=[1, 3, 5]) # 比较查询
BookInfo.objects.filter(id__gt=3)
BookInfo.objects.filter(id__gte=3)
BookInfo.objects.filter(id__lt=3)
BookInfo.objects.filter(id__lte=3) # 不等于的运算符号
BookInfo.objects.exclude(id=3) # 日期的查询
# 查询1980年发表的图书
BookInfo.objects.filter(bpub_date__year=1980)
# 查询1980年1月1日后发表的图书
from datetime import date BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1)) # 查询阅读量大于等于评论量的图书
from django.db.models import F BookInfo.objects.filter(bread__gte=F("bcomment"))
# 查询阅读量大于2倍评论量的图书
BookInfo.objects.filter(bread__gte=F("bcomment") * 2) # 查询阅读量大于20,并且编号小于3的图书]
BookInfo.objects.filter(bread__gt=20, id__lt=3)
BookInfo.objects.filter(bread__gt=20).filter(id__lt=3) # 查询阅读量大于20的图书
from django.db.models import Q BookInfo.objects.filter(Q(bread__gt=20)) # 查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
BookInfo.objects.filter(Q(bread__gt=20) | Q(id__lt=3))
BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
# Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或
# Q对象前可以使用~操作符,表示非not。
BookInfo.objects.filter(~Q(pk__lt=3)) # 聚合函数
# 查询图书的总阅读量
# 使用aggregate()过滤器调用聚合函数。
# 聚合函数包括:
# Avg 平均,Count 数量,
# Max 最大,Min 最小,Sum
from django.db.models import Sum a = BookInfo.objects.aggregate(Sum("bread"))
# 注意aggregate的返回值是一个字典类型,格式如下: {'属性名__聚合类小写':值}
BookInfo.objects.count() # 排序
BookInfo.objects.all().order_by("bread")
BookInfo.objects.all().order_by("-bread") # 由图书的id查询到书中的人物的名字
# 一到多
b = BookInfo.objects.get(id=1)
b.heroinfo_set.all() # 多到一
# 查询到id为1的英雄所在的书的名字
h = HeroInfo.objects.get(id=1)
h.hbook # (涉及到跨表查询)
h.hbook_id # (不涉及到跨相当与取出口的是一个字段的属性) # 关联过滤
# 查询图书,要求图书英雄为"孙悟空"
# 查询的条件在多模型中,要查询的模型为单模型
BookInfo.objects.filter(heroinfo__hname="郭靖") # 查询图书,要求图书中英雄的描述包含"八"
BookInfo.objects.filter(heroinfo__hname__contains="郭靖") # 由一模型类条件查询多模型类条件
# 查询书名为“天龙八部”的所有英雄。
HeroInfo.objects.filter(hbook__btitle="天龙八部")
# 查询图书阅读量大于30的所有英雄
HeroInfo.objects.filter(hbook__bread__gt=30) # 修改更新有两种方法
hero = HeroInfo.objects.get(hname__contains="郭")
hero.hname = "郭靖001"
hero.save()
# 返回值为受影响的行数
HeroInfo.objects.filter(hname="郭靖001").update(hname="郭靖") """
bittle = models.CharField(max_length=20, verbose_name="名称")
bpub_date = models.DateField(verbose_name="发布日期")
bread = models.IntegerField(default=0, verbose_name="阅读量")
bcomment = models.IntegerField(default=0, verbose_name="评论量")
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除") """
book_add = BookInfo()
book_add.btitle = "三毛流浪记"
book_add.bpub_date = date(1993, 12, 27)
book_add.save() """
hname = models.CharField(max_length=20, verbose_name="名称")
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name="性别")
hcomment = models.CharField(max_length=200, null=True, verbose_name="描述信息")
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name="图书")
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")
""" from app01.models import BookInfo book_add = BookInfo()
book_add.btitle = "三毛流浪记2"
book_add.bpub_date = date(1994, 12, 27)
book_add.save() from app01.models import BookInfo, HeroInfo hero_add = HeroInfo()
hero_add.hname = "三毛"
hero_add.hgender = 0
hero_add.hbook_id = book_add.objects.get(bittle="三毛流浪记2")
hero_add.save() HeroInfo.objects.filter(hname__exact="三毛").delete()
django中数据库操作有关部分的更多相关文章
- django中数据库操作——in操作符
django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...
- Django中数据库操作相关的错误
问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...
- Django 2.0 学习(16):Django ORM 数据库操作(下)
Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...
- Django 2.0 学习(14):Django ORM 数据库操作(上)
Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...
- django models 数据库操作
django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...
- Access 中数据库操作时提示from子句语法错误
问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...
- Django与数据库操作
Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django中数据库的配置及相关增删改查
ORM ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 类名对应---- ...
随机推荐
- IO流-file
1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ...
- python 对象存储///对象序列化
如果你有写数据来之不易,并且希望每次都可以方便的读取,那么存储为一个对象是一个很不错的解决方法 方法一. import pickle #首先要导入包 dics={'a':4,'b':5,'c':6}# ...
- idea maven项目打war包 以及项目重新部署
第一步 打war包: 这样war报就在你项目的target目录下: 第二步 部署步骤 首先进入服务器tomcat bin 目录 关闭服务 命令: ./shutdown.sh 然后就要进入webap ...
- BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...
- 求小于n且与n互质的数的个数
int eu(int n){ int ans=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { ans=ans/i*(i-1); while(n%i==0)n/ ...
- 如何在不使用try语句的情况下查看文件是否存在
如果你要确定文件存在的话然后做些什么,那么使用try是最好不过的 如果您不打算立即打开文件,则可以使用os.path.isfile检查文件 如果path是现有常规文件,则返回true.对于相同的路径, ...
- Hbase原理| 优化
GFS -->hdfsmapreduce --->hadoop mrbigtable-->hbase HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统 海量存储:列式 ...
- Linux 常用基本指令
1.ls 参数: -a:列出所有目录(“.”开头的是隐藏文件) -l: 以长格式列出目录下的内容列表 2.cd cd 切换到家目录 cd ~ 切换到家目录 cd .. 切换到上一级目录 3.pwd ...
- maya cmds pymel polyEvaluate 获取 bounding box
maya cmds pymel polyEvaluate 获取 bounding box cmds.polyEvaluate(bc = 1) #模型 cmds.polyEvaluate(bc2 = ...
- springcloud(六):配置中心git示例
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...