ORM 关系对象映射 基础知识点
优点: 1.ORM使我们通用的数据库变得更加的简单便捷。 2.可避免新手程序员写sql语句带来的性能问题。
1. 创建单表
2. 创建关键表
1). 一对一
2). 一对多
3). 多对多
创建表的语句:
python manage.py makemigrations python manage.py migrate
插入:
Author.object.create(**{'name':'wjw'})
修改:
# 方法一 author = models.Author.objects.get(id=5)
author.name = 'haha'
author.save() # 方法二
models.Author.objects.filter(id=5).update(name='haha')
查询:
.filter(**kwargs) # 集合
.all() # 集合
.get(**kwargs) # 行对象
排序:
au = models.Author.objects.order_by('-id')
.reverse() 对查询结果反向排序 .distinct() 从返回结果中去重 .count() 数量 .first() 取第一条 .last() 取最后一条 .exists() 如果QuerySet中包含数据返回true,否则返回false
一对多:
创建数据表
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField() class Book(models.Model):
author = models.ForeignKey('Author', on_delete=models.CASCADE)
namebook = models.CharField(max_length=32)
nametype = models.CharField(max_length=32)
正向查询
# 正向查询
obj = models.Book.objects.filter(namebook='python')[0]
print(obj.author.name)
# 连级查询
obj = models.Book.objects.values('namebook', 'author__name')[0]
print(obj['namebook'] + "++++" + obj['author__name'])
反向查询
# 反向查询
obj = models.Author.objects.filter(name='lixiangshuai')[0]
list = obj.book_set.all().values('namebook')
print(list)
for item in list:
print(item['namebook'])
多对多:
创建多对多数据表
class Teacher(models.Model):
name = models.CharField(max_length=32)
sex = models.CharField(max_length=32) class Student(models.Model):
name = models.CharField(max_length=32)
sex = models.CharField(max_length=32)
teacher = models.ManyToManyField('Teacher')
正向查询
s = models.Student.objects.filter(name='wangjiawei')[0]
t = s.teacher.all()
for i in t:
print(i.name)
反向查询
t = models.Teacher.objects.get(name='zhangjiong')
s = t.student_set.all()
# s = t.student_set.all().values('name')
for i in s:
print(i.name)
基于 __ (双下划綫)的条件查找:
只适用于单表
id__lt = 10, id__gt = 1 # id>1 并且 id<10
id__in = [11, 22, 33] # id = 11,22,33,的数据
.exclude(id__in=[11, 22, 33]) # not in
id__range = [1,2] # 范围 bettween··· and ···
name__contains = 'ven'
name__icontains = 'ven' # icontains 大小写不敏感
__startwith = 'p' # 开头是 p
聚合查询
.aggregate(*args, **kwargs) # 平均价格
.aggregate(avarage_price = Avg('price'))
>>> {'avarage_price':34.35}
Avg 平均值
Min 最小值
Max 最大值
Sum 求和
分组查询
annotate(*args, **kwargs)
models.Author.objects.values('author__name').annotate(sum('price'))
完成~! 收工!!~!~!
ORM 关系对象映射 基础知识点的更多相关文章
- 一:ORM关系对象映射(Object Relational Mapping,简称ORM)
狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...
- Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块
ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...
- Python与数据库[2] -> 关系对象映射/ORM[5] -> 利用 sqlalchemy 实现关系表查询功能
利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例 ...
- Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: fr ...
- Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式
sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- django关系对象映射(Object Relational Mapping,简称ORM)
Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models clas ...
随机推荐
- MapRedece(多表关联)
多表关联: 准备数据 ******************************************** 工厂表: Factory Addressed BeijingRedStar 1 Shen ...
- Solr学习笔记之4、Solr配置文件简介
Solr学习笔记之4.Solr配置文件简介 摘自<Solr in Action>. 1. solr.xml – Defines one or more cores per Solr ser ...
- URAL 1277 - Cops and Thieves - [无向图点带权的最小点割]
题目链接:https://cn.vjudge.net/problem/URAL-1277 The Galaxy Police (Galaxpol) found out that a notorious ...
- win10 64bit安装redis及redis desktop manager的方法
下载地址: MSOpenTech/redis——Github 下载后随便解压到一个地方 在 命令行 启动服务端 命令内容如下: redis-server.exe redis.windows.conf ...
- lamp docker apache2 supervisor monitor
sudo docker run -d -p 80:80 -p 3306:3306 -v /data/lampp/supervisormonitor:/app --name mylamp01 tutum ...
- 2018/03/28 每日一个Linux命令 之 mkdir/rmdir
用于建立空文件夹和删除文件夹 -- 两命令重要参数 -p 递归建立/删除 -- 例如 mkdir -p demo1/demo2/demo3 建立demo3空文件夹,如果demo1/demo2没建立也建 ...
- 《Nginx - location配置》
一:Location 作用 - location 定位 ,也就是可以通过不同URL进行定位,可以很大的增加它配置的灵活性. 二:相关变量 示例: http://192.168.27.27/xxxx $ ...
- mysql 内置功能 存储过程 删除存储过程
删除存储过程 drop procedure proc_name;
- POJ3087:Shuffle'm Up(模拟)
http://poj.org/problem?id=3087 Description A common pastime for poker players at a poker table is to ...
- Word Add-in 函数调用顺序
这个图表明的函数的调用顺序,主要代码如下: // MyAddin.cpp : Implementation of DLL Exports. // Note: Proxy/Stub Informatio ...