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.name class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField() def __str__(self):
return self.name class 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)
Django--QuerySet--基础查询的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- 【Python全栈-后端开发】Django入门基础
Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- Django 【基础篇】
前戏 python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #cod ...
- 巩固复习(Django最基础的部分_具体查看官方文档)
Django学习路1 1.脚本不能随便运行,没准 linux 运行完就上不去了 2.pip 在 linux 上 写 pip3 同理 python 写为 python3 3.在 pycharm 上安装库 ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- Django QuerySet API文档
在查询时发生了什么(When QuerySets are evaluated) QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作.只要你查询的时候才真正的操作数据 ...
- 合并多个python list以及合并多个 django QuerySet 的方法
在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较 ...
- Django中Q查询及Q()对象
问题 一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码: >>> q1 = Entry.objects.filter(headline__st ...
随机推荐
- taro初识一
很早之前就听说京东的凹凸实验室发布的开源的一对多的开源框架---Taro,一对多指的是一套代码编译成多端代码使用,极大的节省了开发的效率和成本 废话不多说 第一步,和vue一样下载相应的是cli脚手架 ...
- Java基础(变量数&常量&据类型&类型转换)
什么是变量: 变量就是一个不固定的数值,它随时会改变,就像银行卡里存的钱一样会变动. 变量的格式:1 数据类型 变量名=变量值: 2 数据类型 变量名: 变量名=变量值: 变量的三大要素:1变量 ...
- OpenStack-RabbitMQ-获取vm、磁盘、网络设备的状态变化
需求 及时知道vm,硬盘,镜像,网络设备.负载均衡器状态变化 分析 Dashboard中也是通过定时使用ajax调用API来获取虚拟机的状态信息的定时轮训的方式过于被动 解决方案 共用rabbitmq ...
- .sh文件启动 jenkins
https://jenkins.io/index.html Jenkins的war包下载http://192.168.89.132:8080/jenkins /home/xmh/.jenkins ...
- day01编程语言,计算机组成: 五大组成部分,计算机三大核心,进制,内存分布图,操作系统
本周内容 第一天: 计算机原理 操作系统 第二天: 编程语言 python入门:环境 - 编辑器 变量 基本数据类型 学习方法 鸡汤 - 干货wwwh:what | why | where | h ...
- AFNetworking的简单使用
AFNetworking的下载地址: https://github.com/AFNetworking/AFNetworking AFNetworking的使用非常简单,创建一个类,调用一个方法就可以达 ...
- freeswqitch odbc
1.安装驱动 yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel -y yum install mysql-conn ...
- Learning-Python【4】:Python流程控制与循环
一.if...else分支 1.什么是if判断 判断一个条件如果成立则如何,不成立则如何 2.为何要有if判断 让计算机能像人一样具有判断能力 语法1:if...else if 判断条件: 代码块1 ...
- Learning-Python【10】:函数初识
一.什么是函数 函数就是代码的一种组织形式,是指将一组语句的集合通过一个名字(函数名)封装起来,要想指向这个函数,只需要调用其函数名即可 函数分为两大类:内置函数 和 自定义函数 二.为何要用函数 减 ...
- HTML基础【3】:列表标签
无序列表 作用:给一堆内容添加无序列表语义(一个没有先后顺序整体),列表中的条目不分先后 格式: li 英文是 list item,翻译为列表项 <h4>选择居住城市(CN)</h4 ...