八月22日,知识点总结:

python manage.py makemigrations
python manage.py migrate

unique=true是指这个字段的值在这张表里不能重复,所有记录值都要唯一,就像主键那样搜索nullable=false是这个字   段在保存时必需有值,不能还是null值就调用save去保存入库

一、增删改查

	1、添加表内容(三种方式)
1.1 obj = models.UserType(列名=‘内容’)
obj.save()
1.2 models.UserType.objects.create(列名=‘内容’) 1.3user_dict={'列名':‘内容’,'列名','内容’}
models.UserType.objects.create(**user_dict) 2、查询数据
2.1 request.POST.get('usernaem')
#获取单条数据,不存在则报错(不建议) 2.2 ret =models.UserType.objects.all()
#获取全部
print(type(ret),ret.query)
for item in ret:
#根据循环可以输出表内容
print(item,item.nid,item.caption) #ret.query 返回一个原生SQL
#ret,得到一个特殊的QuerySet对象 2.3 ret =models.UserType.objects.all().values('nid')
print(ret) #values('xxx') #返回一个列表中包含字典 2.4 ret=models.UserType.objects.all().values_list('nid')
print('ret') #返回一个列表中加元组 2.5 model.UserType.objects.filter(name='name')
# 获取指定条件的数据 3、更改数据库内容
3.1 models.UserInfo.objects.filter(user='alex').update(email='123@qq.com')
#将指定的条件更新到数据库,可以使用字典**kwargs 3.2 obj = models.UserInfo.objects.get(user='alex')
obj = email='!!!!@!!!!!'
obj.save()
#修改单条数据 4、删除数据
4.1models.UserInfo.objects.filter(name='alex').delete()
按条件删除 二、双下划线操作
1.连表操作
1.1 ret =models.UserInfo.objects.all().values('user','user_type__caption')
##user_type__caption __双下划线在这是执行连表操作,输出另外表内容 1.2 拿出类型是超级管理员的所有用户
ret = models.UserInfo.objects.filter(user_type__caption="管理员").values('user','user_type__caption') 2.多对多(ManyToMany)
注:创建多台主机,多个部门
1.自动创建关系表
1.1 h2g =models.ManyToManyField('host')
#创建多对多关系
1.1.1 将多台机器分配给一个组
add添加关系,remove 删除表关系,delete删除表关系和表 set 添加,删除 h = Host.objects.get(hid=1) ##只删除表关系
h.group_set.remove(*Group.objects.filter(gid__gt=1)) h = Host.objects.get(hid=1) ##添加表关系
h.group_set.add(*Group.objects.filter(gid__gt=1)) h = Host.objects.get(hid=1)
h.group_set.all().delete() #delete删除表关系和表 obj =Group.objects.get(gid=1)
print(obj.gid,obj.name,obj.h2g.all())
#bj.h2g.all() 是关系表,没创建关系输出空列表 q =models.objects.filter(hid__gt=3)
obj.h2g.add(*q)
#将多台主机分到obj组 2.2.2 将一台主机分给多个组
h =Host.objects.get(hid=1)
obj =Group.objects.get(gid=1)
obj.h2g.add(h) ##主机id等于1分配到第一组
obj =Group.objects.get(gid=2) ##
obj.h2g.add(h)###主机id等于1分配到第二组 h =models.Host.objects.get(hid=1) ##找到第一台主机
h.group_set.add(*Group.objects.filter(gid__gt=2))
#gid大于2的所有分组分配给H主机 反向查找 表名__set ,查找什么表名就是什么
h.models.Host.objects.get(hid=1)
h.group_set.add(*models.Group.objects.filter(gid__gt=12)) 注:
h = Host.objects.get(hid=1)
h.group_set.add(1) ##可以直接写数字添加
h.group_set.add(Group.objects.get(gid=1))
h.group_set.add(*[1,2,3]) ##可以用列表添加关系
h.group_set.set(Group.objects.filter(gid__gt=18), clear=True)
clear = True 清空在设置(添加)
set 不清空添加
注:附加
update_or_create,get_or_create 这两个是一样的
都是给group和关系表添加数据 前提是关系表里不存在这个数据
列: # r = h.group_set.update_or_create(name='技术部')
如果没有技术部,就给group组中加上技术部,关系表中自动关联一条数据
# print(r)
# r = h.group_set.get_or_create(name='人事部')
# print(r) 2.自己创建表关系
HostToGroup.objects.create(Host_id_id=1,group_id_id=2,status=11)
#添加内容 创建索引
class HostToGroup(models.Model):
# hgid = models.AutoField(primary_key=True)
# host_id = models.ForeignKey('Host')
# group_id = models.ForeignKey('Group')
# status = models.IntegerField()
# class Meta:
# unique_together = [ ###定义唯一索引,里面的索引值就不可以重复
# ('host_id', 'group_id'),
# ]

  

实例

# 1、查询所有图书类型为“科学”的所有书籍的 名称、价格、发布时间、图书类型(两种方式)

# 2、查询作者“alex"参与编写的所有书籍(两种方式)
class Author(models.Model):
'''
作者
'''
name = models.CharField(max_length=100)
age = models.IntegerField() class BookType(models.Model):
'''
图书类型
'''
caption = models.CharField(max_length=64) class Book(models.Model):
'''
图书
'''
name = models.CharField(max_length=64)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
# 数字长度max_digits,有效位数decimal_places
pubdate = models.DateField() ##出版事件
authors = models.ManyToManyField(Author)
book_type = models.ForeignKey(BookType)

表中添加内容

# models.Author.objects.create(name='alex',age=12)
# models.Author.objects.create(name='sunqihu',age=15)
# models.Author.objects.create(name='jay',age=16)
#
# models.BookType.objects.create(caption='文学')
# models.BookType.objects.create(caption='科学')
# models.BookType.objects.create(caption='数学')
#
# book_mode={"name":"一路向西",
# "pages":300,
# "price":50,
# "pubdate":"2011-09-09",
# "book_type_id":2
#
# }
# models.Book.objects.create(**book_mode)

  

添加关系

 # h =models.Book.objects.get(id=1)
# h.authors_set.add(models.Author.objects.filter(id=2))
# h =models.Book.objects.all().get(id=1)
# obj =models.Author.objects.all().filter(id=3)
# print(type(obj))
# # print(h,type(h))
# obj.book_set.add(h)
    # 第一种方法
# rat = models.Book.objects.filter(book_type__caption='科学').values(
# 'name','price','pubdate','book_type__caption'
# )
# print(rat)
# for i in rat:
# print(i)
# rem =models.Book.objects.filter(authors__name='sunqihu').values('name','authors__name')
# print(rem) #第二种方法 # objs =models.BookType.objects.get(caption="科学")
# obj =objs.book_set.values('name','price','pubdate','book_type__caption')
# print(obj) # obj = models.Author.objects.get(name='sunqihu')
# obs =obj.book_set.values('name','authors__name')
# print(obs)

  

八月22日,django知识点总结:的更多相关文章

  1. 6月22日 Django中ORM的F查询和Q查询、事务、QuerySet方法大全

    一.F查询和Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实 ...

  2. 第25月第22日 django channels

    1. https://github.com/andrewgodwin/channels-examples/ https://channels.readthedocs.io/en/latest/

  3. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  4. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  5. 12月22日《奥威Power-BI财务报表数据填报》腾讯课堂开课啦

    一扇可以通向任何地方的“任意门”,是我们多少人幼时最梦寐以求的道具之一.即使到了现在,工作中的我们还会时不时有“世界那么大,我想去看看”的念头,或者在突然不想工作的时刻,幻想着自己的家门变成了“任意门 ...

  6. Autodesk 最新开发技术研讨会 -8月22日-Autodesk北京办公室

    为了增进与广大中国地区Autodesk产品的二次开发人员的了解与互动,帮助中国地区的Autodesk产品二次开发人员了解Autodesk最新的二次开发技术动向,并获得Autodesk公司专业开发支持顾 ...

  7. 见见面、聊聊天 - 5月22日晚7点Meetup,三里屯绿树旁酒吧,畅谈云技术和应用

    总是邮件.QQ什么的线上聊,让我们见面吧,不怕见光死,呵呵.   我和同事会先抛砖引玉,给大家介绍一下Autodesk几款最新的云技术和解决方案,然后大家就可畅所欲言,自由交流.来自五湖四海的人,为了 ...

  8. 2016年12月22日 星期四 --出埃及记 Exodus 21:17

    2016年12月22日 星期四 --出埃及记 Exodus 21:17 "Anyone who curses his father or mother must be put to deat ...

  9. 转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)

    [置顶] 从头到尾彻底理解KMP(2014年8月22日版)

随机推荐

  1. 转载:TypeScript 简介与《TypeScript 中文入门教程》

    简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...

  2. 大量数据快速导出的解决方案-Kettle

    1.开发背景 在web项目中,经常会需要查询数据导出excel,以前比较常见的就是用poi.使用poi的时候也有两种方式,一种就是直接将集合一次性导出为excel,还有一种是分批次追加的方式适合数据量 ...

  3. MySQL引擎、索引和优化(li)

    一.存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术 ...

  4. PowerDesigner 常用设置

    1.使用 JDBC 方式连接 Oracle 逆向生成数据库 PDM 使用 ODBC 方式连接 Oracle 数据库可以借鉴这位兄弟的博客:http://www.cnblogs.com/clivehua ...

  5. ClassNotFoundException超限

    错误日志图 被这弱智的错误吭了半个小时,项目本来好好的,然后因为改版加了很多东西,所以就超限了,一开始总是报下面那图的错,搞的我总以为是retrofit的错,但是好好的框架而且没改过,怎么可能会出错呢 ...

  6. 记录一次Quartz2D学习(五)

    (四)内主要讲了绘制状态的保存与恢复 本次主要讲述 缩放,旋转,平移等操作 5.附加操作 5.1 旋转 TIP: 旋转操作主要是对本次渲染的图层进行旋转,旋转的中心为左上角顶点 - (void)dra ...

  7. SVN使用_获取某版本后改动的文件列表

    本章将讲解如何通过svn命令获取某版本后改动的所有文件 一键操作,告别svn log的繁杂对比工作. 1:安装SVN命令行工具Subversion(不是TortoiseSVN) 下载Subversio ...

  8. jsTree简单应用Demo

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  9. BigCouch资料整理

    BigCouch架构 CHTTPD 封装了FABIC接口,CouchDB在HTTP层的集群操作 FABRIC  CouchDB集群的操作代理. 主要用于控制CouchDB集群,Erlang层面的操作 ...

  10. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...