通过使用 ORM,我们只需要操作 Author 和 Blog 对象,而不用操作相关的数据库表。这里主要介绍一下 Django ORM 的相关使用。...同时 ORM 避免了不规范、冗余、风格不统一的 SQL 语句,可以避免很多人为的 bug,方便编码风格的统一和后期维护。...如果只对 QuerySet 的部分实例(query_set[5], query_set[0:10])进行求值,首先会到 QuerySet 的缓冲中查找是否已经缓存了这些实例,如果有就使用缓存值,如果没有就查询数据库...`content` + 2)) values 和 values_list 有些时候我们不需要获取实例中所有的数据,而只需要获得几个字段的数据即可,使用 values 和 values_list 可以指定检索的字段...values 会返回一个 dict 数组,而 values_list 会返回 list 数组。
如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。...('JR', 'Junior'), ('SR', 'Senior'), ('GR', 'Graduate'), ) 每个元组中的第一个元素,是存储在数据库中的值;第二个元素是在管理界面或...ModelChoiceField 中用作显示的内容。 ...在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。...: {{ get_shirt_size_display }} view 里获取 choice 显示的值: class UserProfile(AbstractUser): """ 用户
,由于是写在book模型中的,所以第一个参数为另一张表Author,第二个参数为把关系表的名字改为‘book_author’,如果不写, 名字会是应用名_本模型名的小写_另一张模型名的小写。...二、添加表记录 1,一对多关系 之前我们创建了Book表和Publish表,两者就是一对多的关系,Book表是‘多’的一方,所以外键字段在Book表,Book表添加和之前的不一样,而‘一’的Publish...related_name的值来复写foo_set的名称。...、基于双下划线的跨表查询 Django还提供了一种直观而高效的方式在查询中表示关联关系,它能自动确认sql join联系。...ss字段的值取出来,就相当于一个纯数字了,可以进行加减乘除操作 查询物理成绩大于生物成绩两倍的学生 student.objects.filter(ws__gt=F('ss')*2) 把每个学生的物理成绩加上
, ('Tom', 100,)).fetchall() print len(query_set) for item in query_set: print...代码的输出是: 1 (6, u'Tom', 10) 当打开raise Exception()的注释,表示在插入的过程中遇到了异常。这时候所有connection中未被提交的数据将被回滚。...那么,这些如何做到的呢? 上下文管理是通过类SqliteDB中的__enter__和__exit__两个魔法函数实现的。...2、逻辑上,enter函数之后,便开始执行with_body内的代码,with_body里的代码包含sql语句和一些业务逻辑,这里说明一下,只要是抛出异常就会触发事务的回滚机制,而不会区分到底是sql语句执行异常还是业务逻辑出现的异常...需要知道的是这个字段 1)传入空字符串‘’,表示手动提交commit,这时需要程序中显示的执行connection.commit进行事务提交,sql中的dml语句才会生效。
filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 values...(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 values_list...() 返回一个可迭代的元祖序列 返回具体对象的 get() first() last() 返回布尔值的方法有: exists() 返回数字的方法有 count() 单表查询之神奇的双下划线...print(book_obj.publisher.name) # 得到出版社对象的名称 print(book_obj.publisher.id) # 得到出版社对象的名称 print(book_obj.publisher_id...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
你要做的就是修改配置文件中的INSTALL_APPSZ中设置,在其中添加models.py所在应用的名称。...(1)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。...如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。...在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。...它运行时立即删除对象而不返回任何值。例如: ? 1 e.delete() 你也可以一次性删除多个对象。
1、无需连表查询性能低,省硬盘空间(选项不固定时用外键) 2、在modle文件里不能动态增加(选项一成不变用Django的choice) 其他字段 db_index = True 表示设置索引 unique...缓存机制1次数据库查询结果query_set都会对应一块缓存,再次使用该query_set时,不会发生新的SQL操作; #这样减小了频繁操作数据库给数据库带来的压力; authors=models.Author.objects.all...:小写表名_set().all() 1对多 如果A表的1条记录对应B表中N条记录成立,两表之间就是1对多关系;在1对多关系中 A表就是主表,B表为子表,ForeignKey字段就建在子表...小写表名(外键表)__ v = UserGroup.objects.values('id','title') v = UserGroup.objects.values('id','title','小写的表名称...') v = UserGroup.objects.values('id','title','小写的表名称__age') 小写的表名 得到有外键关系的列 v = UserGroup.objects.values_list
-h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。...-H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。 -i --ignore-case #忽略字符大小写的差别。...-v --revert-match #显示不包含匹配文本的所有行,就是不显示grep这个命令。 -V --version #显示版本信息。...-w --word-regexp #只显示全字符合的列。 -x --line-regexp #只显示全列符合的列。 -y #此参数的效果和指定“-i”参数相同。...POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0
,db_table指定了对应的表明; 如果不这样指定,字段名默认为app_name, 而表明默认为app名+类名: [app_name]_info. ...verbose_name指定在admin管理界面中显示中文;verbose_name表示单数形式的显示,verbose_name_plural表示复数形式的显示;中文的单数和复数一般不作区别。 ...,数字类型不可以 book_obj.authors.set(['1',]) #这么写也可以,但是注意列表中的元素是字符串,列表前面没有*,之前我测试有*,感觉是版本的问题,没事,能够用哪个用哪个...#Emp表示表,values中的字段表示按照哪个字段group by,annotate里面是显示分组统计的是什么 #连表: # 查询每个部门的名称以及对应的员工个数和员工最大年龄 ret...,然后统计员工个数和最大年龄,最后结果里面显示的是部门名称、个数、最大年龄。
-h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。...-H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。 -i --ignore-case #忽略字符大小写的差别。...-v --revert-match #显示不包含匹配文本的所有行。 -V --version #显示版本信息。...-w --word-regexp #只显示全字符合的列。 -x --line-regexp #只显示全列符合的列。...POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0
语法格式 tree [选项] [目录] 选项说明 -a #显示所有文件 -d #只显示目录(名称) -l #显示链接文件的原始文件 -f #显示所列出的文件或目录的完整目录路径 -i...#不以阶梯的形式显示文件或目录名称 -q #将控制字符以?...字符代替,显示文件和目录名称 -N #直接显示文件或目录的名称 -p #显示每个文件的权限信息 -u #显示文件所有者或者uid -g #显示文件所属组或者gid -s #显示每个文件的大小信息...-h #以可读的方式显示文件的大小信息 -D #显示最后修改日期 -v #按字母数字正序显示文件 -r #按字母数字倒序显示文件 -t #按最后时间排序显示文件 -C #在文件和目录列表上加上色彩...,便于区分文件类型 -P pattern #只显示匹配正则表式的文件或目录名称 -I pattern #与上结果相反 应用举例 #树形显示当前目录及其子目录下的文件及目录名称 [root@
-i 或--ignore-case 忽略字符大小写的差别。 -w 或--word-regexp 只显示全字符合的列。 -x 或--line-regexp 只显示全列符合的列。...#输出选项, -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 -H 在显示符合范本样式的那一列之前,表示该列所属的文件名称。...-l 列出满足条件的文件名称,而不是具体内容,这个用在文件很多时,筛选出哪些文件包含条件 的内容。然后将这些文件筛选出来。...-v,--revert-match ,显示不匹配模式的行,有时候我们需要输出哪些是不满足条件的行,这时 就可以使用-v 选项。 -n 是在输出满足条件的内容前加行行号。...-A 是 After 的意思,和-B 类似,表示将满足条件的行,下面几行输出出来。 -C 后面接一个数字, 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
注意事项: 表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称 id 字段是自动添加的 对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...你要做的就是修改配置文件中的INSTALL_APPSZ中设置,在其中添加models.py所在应用的名称。...related_name 的值来覆写 FOO_set 的名称。...基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。...-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。 -i --ignore-case # 忽略字符大小写的差别。...-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。 -L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。...-V --version # 显示版本信息。 -w --word-regexp # 只显示全字符合的列。 -x --line-regexp # 只显示全列符合的列。...[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
取值,则返回值是 QuerySet 数据类型里面为一个个元组 注意:MySQL 中的 limit 相当于 ORM 中的 QuerySet 数据类型的切片,annotate 里面放聚合函数 values...values 或者 values_list 放在annotate后面: annotate 表示直接以当前表的pk执行分组,values 或者 values_list 表示查询哪些字段, 并且要将 annotate...里的聚合函数起别名,在 values 或者 values_list 里写其别名。...choices范围内,会显示原始数据,比如gender只定义了1-3,那么读取4的时候返回的就是数值4 ''' 多对多关联关系的三种方式 方式一:自己创建第三张表 扩展性高的优点,以及如果第三张表中需要插入其他数据...元信息 ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。
返回数字: count() 数据准备 接着前面的User表,测试数据如下 user_name psw mail yoyo 123456 283340479@qq.com yoyo2 111111 1...yoyo5 111111 0 可迭代对象queryset 查询整张表sql : select * from hello_user django里面查询数据库不需要写sql语句 ret=表的类名称.objects.all...‘user_name’: ‘yoyo2’, ‘mail’: ‘1’}{‘user_name’: ‘yoyo5’, ‘mail’: ‘0’} 其它可迭代对象 exclude() 它包含了与所给筛选条件不匹配的对象...() 由queryset对象调用, 返回值是queryset 一个元组序列 和values差不多,只是这里返回的是元组 ret=User..objects.all().values_list...(“user_name”, “mail”) distinct() 从返回结果中剔除重复纪录 由queryset对象调用,返回值是queryset 和sql里面的distinct去重一样 ret=User.objects.all
每个括号内的列表都代表了我们 dataframe 中的一行,每列都以 key 表示:我们正在处理一个国家的排名,人均 GDP(以美元表示)及其名称(用「国家」)。...请注意,Python 索引从0开始,而不是1,这样,如果要调用 dataframe 中的第一个值,则使用0而不是1!你可以通过在圆括号内添加你选择的数字来更改显示的行数。试试看!...作为一个快速的代表,只显示人均 GDP 高于 5 万美元的国家。 这是这样做到的: ?...有12个国家的 GDP 超过 50000! 选择属于以 s 开头的国家的行。 现在可以显示一个新 dataframe,其中只包含以 s 开头的国家。...这是一个非常肤浅的分析:你想实际做一个加权平均数,因为每个国家的人均 GDP 不代表一个群体中每个国家的人均 GDP,因为在群体中的人口不同。
(一) 第4参数运用(columnNamesOrNumberas any) 参数4是拆分后生成的列数或者字段名称的列表。可以为数字也可以为名称列表。 例: ?...我们这里强制显示为1,则只返回拆分后的第1列。如果我们强制其显示7个列表则会是如下结果。同时如果这个数字7也可以用7个文本命名的字段列表名称组成。有几个文本名称字段则代表返回几个字段。 ?...解释:因为我们通过1个字符进行分割拆分,正常来说会生成的字符是根据被拆分的文本字符来的,但是我们在选择第4参数的时候只显示2列,所以我们要对未显示出来的字符进行处理,参数6的0代表是以列表方式进行保存显示...解释:因为第6参数使用了1,代表剩余字符用文本显示,但是列表数有不够,所以产生了结果中的列数超过了预期,也就是剩余的字符数超过了可显示的列表数。...因为只显示2列,只有语文这个字符能够正常显示,其余的则为错误。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。...-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。 -i --ignore-case # 忽略字符大小写的差别。...-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。 -L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。...-V --version # 显示版本信息。 -w --word-regexp # 只显示全字符合的列。 -x --line-regexp # 只显示全列符合的列。...[^] # 匹配一个不在指定范围内的字符,如:'^A-FH-Zrep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。