查询api的方法:

表.objects.all() ---[obj1,obj2,....]

表.objects.all().first()

表.objects.filter(id=2) ---[obj1,]  ,得到一个集合对象,集合里只有一个,跟上first()或者【0】取到一个具体对象

表.objects.get(id=2)---obj,得到一个单独的对象,确定能找到,可以用,如果找到多个或者没有的,都报错。

QuerySet.first(),与get()方法一样,都得到一个对象

QuerySet.last(),与get()方法一样,都得到一个对象

----update 和save方法区别

Book.objects.filter(id=5).update(price=1000)  #直接更新update 是QuerySet集合对象的方法,推荐

save方法

book = Book.objects.get(id=5)

book.price=400

book.save()

------value方法,

values(*field),得到一个可迭代的字典序列,不再是一个个对象,而是对象的值,#得到QuerySet集合是所有的记录,,里面是字典,key是字段,value是值,

def query_value(request):b1 = Book.objects.values('title')#title值字段# print(b1)  #得到QuerySet集合是所有的记录,,里面是字典,key是字段,value是值,#< QuerySet[{'title': 'Linux'}, {'title': '项塔兰'}, {'title': '追风筝的人'}, {'title': '富爸爸'}] >
b2 = Book.objects.values('title','price')#可以加多个字段print(b2)#< QuerySet[{'title': 'Linux', 'price': Decimal('30.00')},# {'title': '项塔兰', 'price': Decimal('45.00')},# {'title': '追风筝的人', 'price': Decimal('39.90')},#  {'title': '富爸爸', 'price': Decimal('23.00')}] >
b3 = Book.objects.filter(id__gt=4).values('title')#查询id大于4,的title,得到一个对象集合,显示书名#<QuerySet [{'title': '富爸爸'}]>print(b3)
return HttpResponse('value 方法的查询方法')

---

value_list ( )  得到一个元组格式的数据,只有字段的值,

 # ----valuelist 方法查询  ,得到一个元组格式数据,只有字段的值,b4 = Book.objects.filter(id__gt=3).values_list('title')print(b4)   #<QuerySet [('追风筝的人',), ('富爸爸',)]>

exclude()方法,

    b5 = Book.objects.exclude(id__gt=3)#exclude  排除 ,查询id大于4的以外的书籍,<QuerySet [<Book: Linux>, <Book: 项塔兰>]>
b6 = Book.objects.filter(id__lt=4)# 查询id小于4 的书籍 <QuerySet [<Book: Linux>, <Book: 项塔兰>]>print(b5)print(b6)  #b5 和b6 得到结果一样,

----

其他查询方法

#  <6>order_by(*field):      对查询结果排序#  <7>reverse():             对查询结果反向排序,---需要先排序order_by(*field),才能反转#  <8>distinct():            从返回结果中剔除重复纪录#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。#  <11>first():               返回第一条记录#  <12>last():                返回最后一条记录#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False   ---只判断是否有记录

万能的双下划线:

#---------------了不起的双下划线(__)之单表条件查询----------------

# models.Tb1.objects.filter(id__lt=10, id__gt=1)  # 获取id大于1 且 小于10的值 #

# models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据

# models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in #  exclude  不包含指定的数据

# models.Tb1.objects.filter(name__contains="ven")  #包含的内容

# models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感

# # models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and #

# startswith,istartswith, endswith, iendswith,

在url文件中匹配路由和视图函数add

#mysql 拷贝是不能用,有配置信息,
#是要需要修改配置from gu_orm import viewsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^add/$',views.add),
]

添加一条记录有2种方法

create方法有2种,save方法

create方法1 :给一对多的关系表中添加数据 ,写死,直接对应数据库的字段添加,是一组组键值对

先给PUblish表添加记录,手动添加,点击 --减号右边  DB 就可以保存,

注意:PUblish表要在book表上面,因为生成表的时候,book表有PUblish_id的字段,所以会先找到PUblish表,然后在book中添加对应的id号,要不报错

在model里创建表,

book与PUblish是一对多的关系,一个出版社可以出版多种书,外键就要建在多的表中,

from django.db import models# Create your models here.
class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=32)class Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=5 , decimal_places=2)#书籍与出版社是一对多,书是多,出版社是一,外键(子表)建在多的表中,#publish 作为一个外键 与Book 表建立一对多关系,默认绑定到Book 的主键id上publish = models.ForeignKey(Publish,)#一对多的增删改查,#做增加
#先给一 的表添加数据,才能在对应的多 的表增加数据,要不Publish_id 没有值,

在views文件中

先导入从model 已经创键的表Book表,  给book表增加数据,

Book.objects.cteate(),用create方法创建表,

数据库的字段对应要添加值,然后运行项目,

from django.shortcuts import render,HttpResponse# Create your views here.from gu_orm.models import *   -----从models表中导入所有的表,def add(request):#添加一条book记录
    Book.objects.create(     title = '千城之城',price = 11.90,publish_id = 1#以数据库的字段为准,
    )return HttpResponse('ok')

此时就可以看到数据库book表中就有了一条记录,并且对应着一条PUblish的记录

=====

获取对象的具体值,单个对象字段属性

#从数据库获取一条记录,book_obj = Book.objects.get(id=1)print(book_obj.title)print(book_obj.price)

运行项目,得到结果,,,

千城之城
11.90

现在打印book表中一个外键的字段PUblish

print(book_obj.publish)   ------Publish object  得到一个对象,是PUblish表中的一条记录,对应书中的一条记录,,是一个对象,因为是一对多的关系

要想显示外键的具体的值,就在PUblish表加上__str__(self):,就会显示具体的值,而不再是对象

如下,

class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=32)#有了__str__()方法,就可以看到对象具体的值,没有它 ,打印对象,就是一个对象,# 当用到PUblish表中字段的时候,# 就可以看到对象具体的值,而不再是一个看不懂的对象,def __str__(self):return self.name

此时再打印book表的外键,

 #打印外键字段publishprint(book_obj.publish)   ---北京出版社#Publish object 得到一个对象,是 publsih表中对应的一条记录也就是一个对象,#看不到具体的值,想看到对象具体的值,就用 __str__()方法,所以在models里#就可以用__str__(),就可以看到外键的具体值,而不再是一个对象,

---所以在每个表中,都可以使用__str__(self)方法,显示对象的具体的值

要想显示多个值也可以,用+ 号,记得空开距离

 def __str__(self):return self.name +" "+self.addr

create方法2 :给一对多的关系表中添加数据

先创建一个PUblish对象

 #方法2,先找到一个出版社对象publish_obj = Publish.objects.get(id=2)

然后再用create方法,把publish_obj对象给publish表

 #创建book对象,
    Book.objects.create(title = '项塔兰',price = 23.50,publish = publish_obj,)

运行程序,重新访问视图函数add,url地址栏重新访问add,数据库就了新添加的记录

添加记录方法2,

=====save方法

#save 方法,用实例出来的对象保存# 一对多,p = Publish(name='人民出版社',addr='昌平')p.save()#把对象保存到数据库#与PUblish表添加一个对象,既一条记录book = Book(title = '追风筝的孩子',price = '15.00',publish = p)#与PUblish的publish_id绑定一个存在的记录,既对象book = Book(title = '追风筝的孩子',price = '15.00',publish_id = 3)book.save()  #保存到数据库

转载于:https://www.cnblogs.com/gyh04541/p/7910004.html

django 一对多的添加记录create 和save 方法,update 更新和save()方法的区别,查询API的方法...相关推荐

  1. django之跨表查询及添加记录

    创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); 一本书只应该由一个出版商出版,所以出版 ...

  2. 用Java Instrumentation 在类加载时添加记录

    用Java Instrumentation 在类加载时添加记录 发布者:xanadu0214   来源:网络转载   发布日期:2013年11月06日   Java学习交流群:471651004 在分 ...

  3. mybatis添加记录时返回主键id

    参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作. 在使用mybatis作为ORM组件时,可以很方便地达到这 ...

  4. django解决使用DateTimeField添加、修改记录时不动态更新时间的问题

    解决方法 定义model时,若想动态显示最后的修改时间,使用: from django.db import models from datetime import datetime models.Da ...

  5. python3 django html 中文乱码_解决django后台管理界面添加中文内容乱码问题

    在学习使用django做一个简单的个人博客项目,通过admin后台添加中文文章内容的时候,遇到中文内容显示乱码的问题. 排除了网上资料中的提到的几个问题: 1.数据上传默认采用的是unicode编码 ...

  6. 【SQL练习】创建表格,并添加记录

    1.创建表格结构  2.添加记录  代码: 1.创建表格: drop table work; drop table employee; drop table department;create tab ...

  7. 使用DataSet对象添加记录

    使用DataSet对象添加记录 使用DataSet对象添加记录 步骤: ●创建Connection对象 ●创建DataAdapter对象 ●通知数据适配器我们要使用的连接 ●创建一个DataSet对象 ...

  8. mysql创建数据库时候同时创建表空间_mysql::创建多个表空间添加记录数据会添加到哪个表空间中?...

    问题:创建多个表空间添加记录数据会添加到哪个表空间中 答:后一个 drwx------ 2 mysql mysql 4.0K Apr 26 08:04 demo -rw-rw---- 1 mysql ...

  9. PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程

    今天有位站长咨询烈火一个特别简单的问题--如何使用PHP向Mysql添加记录?现在就把一个简单的存储数据的代码给出来,稍加几句分析,高手就不要看了,非常基础的例子. PHP向MySQL数据库中写入数据 ...

最新文章

  1. 机器学习特征筛选:互信息法(mutual information)
  2. 垂直AI初创企业 VS 横向AI初创企业:不同的产品路线选择
  3. php phpunit selenium,phpunit+selenium环境筹建
  4. 数学之美 系列二 -- 谈谈中文分词
  5. 腾讯医疗AI实验室:3篇论文被国际顶尖会议收录
  6. 返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
  7. spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...
  8. mysql range用法_MySQL中Explain的用法总结(详细)
  9. 解决QQ未启用状态,QQ留言图标未启用
  10. 淘沙潜行,数一数英雄的多姿,王者荣耀英雄、皮肤、武器展览
  11. Selenium webdriver实现原理
  12. 简述oracle_sid,环境变量 ORACLE_SID 简述
  13. 软件中的易用性设计及测试(一)
  14. angular复用路由组件_Angular Router的组件路由简介
  15. 看图说话!这个 AI 商品识别系统开源了!
  16. TStack运维笔记(04)- 配置VPC网络及告警设置
  17. Unity中使用QQ邮箱发送验证码
  18. 光模块价格由带宽还是距离决定_佛山单模光模块价格
  19. Mars3D中无人机航拍的数据想叠加到三维地图上,实现的流程和方法
  20. Centos 通过 Nginx 和 vsftpd 构建图片服务器

热门文章

  1. LeetCode 2217. 找到指定长度的回文数
  2. sweetalert_用于将SweetAlert集成到Vuejs的小包装器
  3. 实现同时加载大量大图里,由马马赛克变清晰过程方法
  4. 对 jiffies 溢出、 系统滴答数ticks、time_after 宏的分析理解
  5. 学习java :if-else和循环语句 练习案例
  6. 曙光超算平台如何使用以及常见问题
  7. 嵌入式C编程之错误处理(附代码例子)!
  8. java jce_了解Java JCE的加密
  9. 了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类
  10. 某叶C语言学习上重大的一步——一元三次方程求解