# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 创建数据库
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中数据库操作有关部分的更多相关文章

  1. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  2. Django中数据库操作相关的错误

    问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...

  3. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  4. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  5. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  6. Access 中数据库操作时提示from子句语法错误

    问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...

  7. Django与数据库操作

    Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...

  8. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  9. django中数据库的配置及相关增删改查

    ORM ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 类名对应---- ...

随机推荐

  1. Windows Docker 使用笔记

    1.设置共享盘 2.设置加速器.国内拉取docker镜像会出现卡顿甚至拉不下来的问题,原因在于大陆沿海的一道墙,在docker设置中添加镜像代理(registry-mirrors)PS:镜像加速器地址 ...

  2. Summary of continuous function spaces

    In general differential calculus, we have learned the definitions of function continuity, such as fu ...

  3. Azure 国内版 如何用powershell修改linux系统的密码

    国内版不像国际版本那样,一个UI按钮就解决问题,国内版很多功能上线比较慢,我们只能用powershell工具进行命令行 式的更改,也当温习一下命令了,好久不用了. $vm = Get-AzureVM ...

  4. python全栈开发day73-Django认证系统

    一.Form组件 day73 2018-08-10 1. 内容回顾 1. form表单组件 1. 常用字段 1. CharField() 2. ChoiceField() 2. 参数或配置 1. la ...

  5. python编码,赋值和is的区别

    1. == 与 is 的区别 赋值 == 比较值是否相等,is 比较,比较的是内存地址. 小数据池的作用是节省内存空间 数字的范围:-5 到 256 共用一个数据池 字符串范围:1.不能有特殊字符.2 ...

  6. Python学习(二十八)—— Django模板系统

    转载自http://www.cnblogs.com/liwenzhou/p/7931828.html Django模板系统 官方文档 一.常用语法 只需要记两种特殊符号: {{  }}和 {% %} ...

  7. Anslib 使用错误归纳

    一.遇到问题 [root@localhost ansible]# ansible test43 -m ping -kSSH password: 192.168.30.43 | FAILED! => ...

  8. Vijos1983 NOIP2015Day2T3 运输计划 transport LCA

    题目链接Vijos 题目链接UOJ 该博客在博客园的链接 转载一个大佬的题解: 点击这里->大佬题解 下面谈谈我的感悟: 当然写代码也是写的很艰辛: 我力劝C++的同胞们,这题卡常数,Dfs党会 ...

  9. weka的基本使用

    目录: 1. 简介 2.界面初识 3.数据格式 4.数据准备 5.关联规则 6.分类与回归 7.聚类分析 8.Weka相关资料 9.Weka二次开发 10.Weka源代码导入 1. 简介 WEKA的全 ...

  10. css 其他

    去掉border和padding占用设置元素额外的宽高,使浏览器显示的元素宽高+border+padding的总和与设置的一致,它在浏览器的总宽=40px-border-padding (默认时: 设 ...