Django--QuerySet--基础查询
Django--QuerySet--基础查询
创建模型类:
from django.db import models# Create your models here.class Blog(models.Model):name = models.CharField(max_length=100)tagline = models.TextField()def __str__(self):return self.nameclass Author(models.Model):name = models.CharField(max_length=200)email = models.EmailField()def __str__(self):return self.nameclass Entry(models.Model):blog = models.ForeignKey(Blog, on_delete=models.CASCADE)headline = models.CharField(max_length=255)body_text = models.TextField()pub_date = models.DateField()mod_date = models.DateField()authors = models.ManyToManyField(Author)n_comments = models.IntegerField()n_pingbacks = models.IntegerField()rating = models.IntegerField()def __str__(self):return self.headline
对数据库的迁移生成数据表:
| queryset_demo_author | | queryset_demo_blog | | queryset_demo_entry | | queryset_demo_entry_authors | # 在模型类中我们使用了 多对多所以系统会自动的为我们创建了一个表。 +-----------------------------+
queryset_demo_entry_authors表结构
mysql> desc queryset_demo_entry_authors;
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| entry_id | int(11) | NO | MUL | NULL | |
| author_id | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
使用shell 进行对数据库的测试:
save()
(venv) lee@lee:~/PycharmProjects/Djdemo/djdemo$ python manage.py shell # 执行shell >>> from queryset_demo.models import Blog,Author,Entry # 导入所需要得类 >>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') # 创建对象 >>> b.save() # 存入数据库
对数据库进行查询:
mysql> select * from queryset_demo_blog; +----+--------------+------------------------------+ | id | name | tagline | +----+--------------+------------------------------+ | 1 | Beatles Blog | All the latest Beatles news. | +----+--------------+------------------------------+ 1 row in set (0.01 sec)
数据库查询
creat()
>>> crete_demo = Blog.objects.create(name='create_test',tagline='This is the wayof create') # 数据库得查询 mysql> select * from queryset_demo_blog; +----+--------------+------------------------------+ | id | name | tagline | +----+--------------+------------------------------+ | 1 | Beatles Blog | All the latest Beatles news. | | 2 | create_test | This is the wayof create | +----+--------------+------------------------------+
create()
在数据库中已经存在的数据进行属性的修改:
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') >>> b.save()>>> b.name 'Beatles Blog'>>> b.name = 'change_new_name' # 对属性的值进行修改 >>> b.name 'change_new_name' >>> b.save() # 将修改的值存储到数据库中 mysql> select * from queryset_demo_blog; +----+-----------------+------------------------------+ | id | name | tagline | +----+-----------------+------------------------------+ | 1 | change_new_name | All the latest Beatles news. | | 2 | create_test | This is the wayof create | +----+-----------------+------------------------------+ 2 rows in set (0.00 sec)
注意:
1. 必须是在数据库中存在的数据。
2.当我们获取到属性的时候,进行修改后,必须执行save()方法才能重新的存入到数据库中。
ForeignKey字段的更新:
数据库文件的添加:
mysql> select * from queryset_demo_author; +----+-------+---------------+ | id | name | email | +----+-------+---------------+ | 1 | Tom | Tom@123.com | | 2 | Jone | jone@123.com | | 3 | Kevin | kevin@123.com | +----+-------+---------------+ 3 rows in set (0.00 sec)mysql> select * from queryset_demo_blog; +----+-----------------+------------------------------+ | id | name | tagline | +----+-----------------+------------------------------+ | 1 | change_new_name | All the latest Beatles news. | | 2 | create_test | This is the wayof create | | 3 | Cheddar Talk | One to Many test | | 4 | blog_3 | this is a test | +----+-----------------+------------------------------+ 4 rows in set (0.00 sec)mysql> select * from queryset_demo_entry; +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ | id | headline | body_text | pub_date | mod_date | n_comments | n_pingbacks | rating | blog_id | +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ | 1 | python | This is a demo | 2018-07-11 | 2018-07-14 | 10 | 29 | 23 | 2 | # 稍后我们将进行一个修改 +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ 1 row in set (0.00 sec)
对一对多的字段进行更新:
需求让Entry的表id = 1 的数据和 Blog id = 4 进行关联
>>> from queryset_demo.models import Blog,Entry,Author >>> entry = Entry.objects.get(pk=1) # 数据库中只有一条数据 >>> entry <Entry: python> # 返回一个对象>>> entry.blog <Blog: create_test> # 通过属性获得我们关联的一个对象>>> entry.blog.tagline 'This is the wayof create' # 获取关联对象的属性>>> change_bolg_3 = Blog.objects.get(pk=4) # 创建我们想要更新的对象>>> entry.blog = change_bolg_3 >>> entry.save()>>> entry.blog = change_bolg_3 # 跟新我们的关联 >>> entry.save() # 存储到数据库 对数据库查询验证 >>> entry = Entry.objects.get(pk=1) >>> entry <Entry: python> >>> entry.blog <Blog: blog_3>mysql> mysql> select * from queryset_demo_entry; +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ | id | headline | body_text | pub_date | mod_date | n_comments | n_pingbacks | rating | blog_id | +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ | 1 | python | This is a demo | 2018-07-11 | 2018-07-14 | 10 | 29 | 23 | 4 | +----+----------+----------------+------------+------------+------------+-------------+--------+---------+ 1 row in set (0.00 sec)
ManyToManyField的更新:
需要注意的地方在创建模型类的时候我们知道当字段出现多对多的对应关系的时候那么djnago会在系统中给给我们默认的生成一张关系表。
>>> john = Author.objects.create(name="John") >>> paul = Author.objects.create(name="Paul") >>> entry.authors.add(john,paul) # 可以同时添加多个 entry中的authors字段 数据库中进行插叙mysql> select * from queryset_demo_author; +----+-------+---------------+ | id | name | email | +----+-------+---------------+ | 1 | Tom | Tom@123.com | | 2 | Jone | jone@123.com | | 3 | Kevin | kevin@123.com | | 4 | Joe | | | 5 | John | | | 6 | Paul | | +----+-------+---------------+ 6 rows in set (0.00 sec)mysql> select * from queryset_demo_entry_authors; +----+----------+-----------+ | id | entry_id | author_id | +----+----------+-----------+ | 1 | 1 | 2 | | 2 | 1 | 4 | | 3 | 1 | 5 | | 4 | 1 | 6 | +----+----------+-----------+ 4 rows in set (0.00 sec)
转载于:https://www.cnblogs.com/Echo-O/p/9302579.html
Django--QuerySet--基础查询相关推荐
- 【django】基础条件查询
一. 基本查询 get查询单⼀结果,如果不存在会抛出模型类.DoesNotExist异常. FilmInfo.objects.get(fid=1) <FilmInfo: django> F ...
- Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...
- 【Python Django2.0入门教程】ORM之QuerySet 数据查询API:all get filter distinct first last count
在ORM增删改操作文章里,主要讲了ORM的增删改查的基本操作,这节我们主要是讲ORM查询操作,查询操作是Django的ORM框架中最重要的内容之一,下面是我们常用到的与查询相关的API. 注意,本章节 ...
- Django框架基础知识点
Django框架 1.Django创建项目的命令 django-admin startproject 项目名称 python manage.py startapp 应用app名 2.Django创建项 ...
- Django的基础操作总结
Django的基础操作总结 1:准备开始 建立一个新的project: django-admin.py startproject XXXXXX(名称) 建立一个新的App:python manage. ...
- Django框架基础知识汇总(有项目版)
Web框架本质## web系统概念 1. Http,无状态,短连接 2. 浏览器(socket客户端).网站(socket服务端) web框架本质 import socket def handle_r ...
- django 单表查询
一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- django之ORM查询操作(二)
文章目录 查询集 基础条件查询--针对一个属性 F和Q对象 聚合函数 统计总的阅读量 关联查询 基础关联查询 内连接查询 自关联查询 查询集 查询集: 表示从数据库中获取的模型对象集合 在管理器上调用 ...
- Django的model查询操作 与 查询性能优化
Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...
- Django QuerySet API文档
在查询时发生了什么(When QuerySets are evaluated) QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作.只要你查询的时候才真正的操作数据 ...
最新文章
- Microbiome:浙大马忠华团队-生防细菌抑制病原真菌新机制
- matlab中阈值计算方法,三种阈值计算方法在MatLab6.5中的实现
- Active Diretory 全攻略(八)--组策略(2)
- .NET (C#) Internals: ASP.NET 应用程序与页面生命周期——吴秦(Tyler)
- STM32学习之总线与时钟
- 【Android】【录音】Android录音--AudioRecord、MediaRecorder
- Sublime Text 3 Plugin Better!
- Spring4-@PostConstruct和@PreDestroy注解的使用
- python函数调用执行的四个步骤_如何调用python函数
- Android 静默安装
- 【SpringCloud】Could not find artifact org.springframework.cloud:spring-cloud-starter-xxx
- ST_Intersection
- 英文版ubuntu系统如何添加中文拼音输入法
- 全栈开发必看书籍整理及推荐(精选)
- linux arecord录音
- python安装dlib(已成功并且无出现报错AttributeError: module ‘dlib‘ has no attribute ‘get_frontal_face_detecetor
- 开创云端时空智能,千寻位置加速三维实景中国建设
- 维骨力 Vinteail-S Capsules
- 图解SQL面试题:多表如何查询?
- vue3 admin 后台管理项目小计