###############    单表操作-添加数据    ################

import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
import django
django.setup() from app01 import models # 一、添加表记录
# 对于单表有两种方式
# 添加数据的两种方式
# 方式一:实例化对象就是一条表记录
obj = models.Publish(name="上地出版社", city="北京", email="1919@qq.com")
obj.save()
# 方式二:
models.Publish.objects.create(name="朝阳出版社", city="北京", email="1919@qq.com")

###############    单表操作-查询数据-必会的13条    ################

"""
返回QuerySet对象的方法有
all() filter() exclude() order_by() reverse() distinct() 特殊的QuerySet
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列

返回具体对象的
get() first() last() 返回布尔值的方法有:
exists() 返回数字的方法有
count() """

实例:

import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
import django
django.setup()
from app01 import models # ORM一般操作,必知必会13条:
# 返回queryset对象的:
# 8个,all filter values values_list exclude order_by reverse distinct
all_book = models.Book.objects.all() # 返回所有数据,结果是可以遍历的
book1 = models.Book.objects.filter(id=1) # 返回满足条件的数据
book2 = models.Book.objects.values() # 这是把所有字段拿出来了,这是一个字典序列,values('name','create_time') #可以指定字段,
book3 = models.Book.objects.values_list() # values_list('name','create_time') #这是返回的一个元组,
book4 = models.Book.objects.exclude(id=1) # 返回不满足条件的数据
# book5 = models.Book.objects.order_by('id') # 对结果排序,升序
# book5 = models.Book.objects.order_by('-id') # 对结果排序,降序,在字段前面加减号,
book5 = models.Book.objects.filter(id__lt=3).order_by('-id') # 对过滤结果进行排序
book6 = models.Book.objects.reverse()
book7 = models.Book.objects.distinct()
# 返回具体对象的:
# 3个,get first last
book8 = models.Book.objects.get(id=1) # 查不到数据会报异常,所以一般不用这个,返回的结果中有且只有一条数据,有多条数据,也会报异常
book9 = models.Book.objects.first()
book10 = models.Book.objects.last()
# 返回布尔类型
# 1个,exists
book11 = models.Book.objects.exists() # 判断查询集里面有没有数据,如果有就是True,没有就是False,括号里面不需要有值
# 返回数量
# 1个,count
book12 = models.Book.objects.count() print(book12)

###############    单表操作-双下划线   ################

import os
from datetime import date
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
import django
django.setup()
from app01 import models # 模糊查询:
book1 = models.Book.objects.filter(title__contains='红') # 包含红的,
book2 = models.Book.objects.filter(title__endswith='志') # 以志结尾的,
book3 = models.Book.objects.filter(title__startswith='西') # 以西开头的 # 查询书名不为空的书
book4 = models.Book.objects.filter(title__isnull=False) # 范围查询
book5 = models.Book.objects.filter(id__in=[2, 3]) # 比较查询
book6 = models.Book.objects.filter(id__gt=3) # id大于3,great
book7 = models.Book.objects.filter(id__lt=3) # id小于3 less
book8 = models.Book.objects.filter(id__gte=3) # id大于等于3 equal
book9 = models.Book.objects.filter(id__lte=3) # id小于等于3 equal # 日期查询
# 查询1980年出版的图书
book10 = models.Book.objects.filter(pub_data__year=1980)
# 查询1980年1月1日后发布的图书
book11 = models.Book.objects.filter(pub_data__gt=date(1981, 1, 1))

###############    django -修改数据    ################

import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
import django
django.setup()
from app01 import models # 第一种方式
publish = models.Publish.objects.get(nid=1) # get返回一个具体的对象
publish.name = "tenlen"
publish.save() # 第二种方式
models.Publish.objects.filter(nid=2).update(name="xxx") # 不能使用get(id =5) filter返回一个queryset对象 ret = models.Publish.objects.all()
print(ret) """
修改表记录
注意:
<1> 第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,
而filter返回的是一个QuerySet对象(filter里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'的行数据)。
<2>在“插入和更新数据”小节中,我们有提到模型的save()方法,这个方法会更新一行里的所有列。
而某些情况下,我们只需要更新行里的某几列。
此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,
表示受影响的记录条数。
注意,这里因为update返回的是一个整形,所以没法用query属性;对于每次创建一个对象,想显示对应的raw sql,
需要在settings加上日志记录部分 """

 ###############    ORM-删除数据    ################

import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
import django
django.setup()
from app01 import models models.Publish.objects.filter(nid=id).delete() b =models.Publish.objects.get(pk=1)
b.delete() """
删除表记录
删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如:e.delete()
你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。
例如,下面的代码将删除 pub_date 是2005年的 Entry 对象:
Entry.objects.filter(pub_date__year=2005).delete() 要牢记这一点:无论在什么情况下,QuerySet 中的 delete() 方法都只使用一条 SQL 语句一次性删除所有对象,
而并不是分别删除每个对象。如果你想使用在 model 中自定义的 delete() 方法,就要自行调用每个对象的delete 方法。
(例如,遍历 QuerySet,在每个对象上调用 delete()方法),而不是使用 QuerySet 中的 delete()方法。 在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。
例如:
b = Blog.objects.get(pk=1)
b.delete()
要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。
这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。
如果你确认要删除所有的对象,那么你必须显式地调用:
Entry.objects.all().delete() """

###############    django -ORM单表查询函数    ################

###############    django -ORM单表查询函数    ################

django框架基础-ORM单表操作-长期维护的更多相关文章

  1. django框架基础-ORM跨表操作-长期维护

    ###############    一对一跨表查询    ################ import os if __name__ == '__main__': os.environ.setde ...

  2. Django框架05 /orm单表操作

    Django框架05 /orm单表操作 目录 Django框架05 /orm单表操作 1. orm使用流程 2. orm字段 3. orm参数 4. orm单表简单增/删/改 5. orm单表查询 5 ...

  3. Django框架06 /orm多表操作

    Django框架06 /orm多表操作 目录 Django框架06 /orm多表操作 1. admin相关操作 2. 创建模型 3. 增加 4. 删除 5. 修改 6. 基于对象的跨表查询 7. 基于 ...

  4. Django之模型---ORM 单表操作

    以上一随笔中创建的book表为例讲解单表操作 添加表记录 方式一 # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.o ...

  5. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  6. day 55 Django基础五之django模型层(一)单表操作

      Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...

  7. Django模型层之单表操作

    Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  8. day 46 Django 学习3 数据库单表操作以及反向解析

    前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变         2:反向解析之 ...

  9. day59——orm单表操作

    day59 orm单表操作 对象关系映射(object relational mapping) orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执 ...

随机推荐

  1. python笔记(很乱)、打算抽个时间再好好整理

    最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...

  2. 吴裕雄--天生自然MySQL学习笔记:MySQL 序列使用

    MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 使用 AUTO_INCREMENT ...

  3. css实现高度自适应

    要求.上部固定高度50px,下部分自适应剩下整个屏幕 html, body { height: 100%; margin: 0px; padding: 0px; } #main { backgroun ...

  4. Java--类初始化

    package httpclient.demo; public class StaticTest { public static void main(String[] args) { staticFu ...

  5. 1. 现代 javascript 用法 简介 及 babel

    简介 包含 ECMAScript 基本概念,babel 使用 ,eslint 使用 以及新语法的介绍 和使用经验 ECMAScript 概念 ECMASctipt 是一种由 Ecma (前身为欧洲计算 ...

  6. vue多选验证

    vue select 多选 验证 <FormItem :prop="'formList.'+index+'.name'" label="姓名" :rule ...

  7. main函数的参数(int argc,char *argv[])

    一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...

  8. uWSGI调整buffer-size

    https://uwsgi-docs.readthedocs.io/en/latest/Options.html#buffer-size buffer-size argument: required_ ...

  9. 15)png图片旋转贴图

    1)基本代码展示  还是上一个那个总代码: #include<Windows.h> #include<gdiplus.h>//GDI+的头文件 using namespace ...

  10. ajax使用json数组------前端往后台发送json数组及后台往前端发送json数组

    1.引子 Json是跨语言数据交流的中间语言,它以键/值对的方式表示数据,这种简单明了的数据类型能被大部分编程语言理解.它也因此是前后端数据交流的主要方式和基础. 2.前端往后台传输json数据 第一 ...