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(关系对象映射) 类名对应---- ...
随机推荐
- C++ 复制构造函数 与 赋值运算符
在C++中,将一个对象赋给另外一个对象,编译器将提供赋值运算符的定义. 有两种情况,下面假设catman是Monster的一个实例 第一种:初始化 Monster golblen= catman; 第 ...
- [转] js前端解决跨域问题的8种方案(最新最全)
1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.j ...
- 移动端开发demo—移动端web相册(一)
本文主要是介绍开发移动端web相册这样一案例用到的前置知识. 一.移动端样式 移动端更接近手机原生的方式. 如下是一个angular mobile的demo的例子: 移动端demo做成这样的好处: 在 ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- flink的Standalone集群安装
1:上传安装包到linux系统 使用rz命令 2:解压 tar –zxvf flink-1.5.0-bin-hadoop24-scala_2.11.tgz 3:修改配置文件 vim conf/flin ...
- go-关于指针和地址
经常会见到: p . *p , &p 三个符号 p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数. 而*p表示此指针指向的内存地址中存放的内 ...
- spark批量写写数据到Hbase中(bulkload方式)
1:为什么大批量数据集写入Hbase中,需要使用bulkload BulkLoad不会写WAL,也不会产生flush以及split. 如果我们大量调用PUT接口插入数据,可能会导致大量的GC操作.除了 ...
- windows云服务器数据迁移
刚入职,第一个任务是完成windows腾讯云到windows华为云上的MySQL数据库迁移.之前都是在CentOS上搞,感觉没啥难度,一口答应,没想到各种坑接踵而来.次数不再叙述坑都有哪些了,说说怎么 ...
- java的IO流的一些测试
public class Demo02 { public static void main(String[] args) { //获取当前毫秒值,用于测试 long l = System.curren ...
- 关系网络数据可视化:2. Python数据预处理
将数据中导演与演员的关系整理出来,得到导演与演员的关系数据,并统计合作次数 import numpy as np import pandas as pd import matplotlib.pyplo ...