关联mysql步骤:

第一步:下载pymysql:pip install pymysql

第二步:在工程目录下的init文件下,将pymysql引入  

    	import pymysql
pymysql.install.. 第三步:在工程目录下的settings文件下,找到databases配置信息 将配置信息更改为mysql配置
'ENGINE':'django.db.backends.mysql',
'NAME':'Learn',
'USER':'root',
'PASSWORD':'rock1204',
'HOST':'localhost',
'PORT':'3306', 第四步:我们需要通过mysql创建一个名字相同的数据库以便链接 第五步:可以通过models生成数据库迁移文件 urls配置: 如果出现多个APP 这是我们怎么urls 第一步:在每个APP里面创建一个urls.py文件,然后将每个APP
的自己的url放到这个文件里
第二步:在工程目录下,对url进行管理,对应的APP,用include进行包含操作 templates配置: 如果templates包出现在了工程级目录下,需要配置一个路径以便于告诉所有的APP 到我的工程目录下调用templates os.path.join(BASE_DIR,'templates') 当我们拿到查询结果集时,如果我们利用切片操作,拿到我们需要的几个 但是剩下的是以缓存的形式存在于内存中,这个时候,如果你再次去切片结果 他会直接从缓存中进行操作,而不再进行数据库的查询 创建数据库的时候 >务必记得设置编码格式 create database 数据库名 charset utf8;

- Django运算表达式与Q对象/F对象
1 模型查询
概述:
1 查询集:表示从数据库中获取的对象的集合
2 查询集可以有多个过滤器,通过 逻辑运算符连接
3 过滤器就是一个函数,基于所给的参数限制查询的结果,类似MySQL模糊查询中where语句
4 查询集等同select语句12345
2 查询集
特点:
1 查询集通过调用过滤器方进行查询, 查询集经过过滤器筛选后返回新的查询集,可以链式调用
2 惰性执行 创建查询集不会带来任何数据库的访问直到调用数据库才会访问 返回单个数据查询:
get() 返回一个满足条件的对象
注意:没有找到符合条件的对象,模型类引发异常 模型类.DoesNotExists异常
如果找到多个对象也会引发异常 模型类.MultipleObjectsReturned
count() 返回查询集中的对象个数
first() 返回第一个查询集对象
last() 返回最后一个查询集对象
exists() 查询集是否有数据,如果有数据返回true 限制查询集:查询集返回的是列表,可以采用下标的方法进行限制,等同于sql中的limit语句
studentList = Student.objects.all()[0:5] 查询集缓存 : 每个查询集都包含一个缓存,来最小化的对数据库访问。在新建的查询集中,缓存首
次为空,第一次对查询集求值,django会将数据缓存,并返回结果,以后结果直接使用缓存集的数据
12345678910111213141516171819
3 常见过滤器
all() 返回所有对象
filter() filter(键=值,键=值) 且关系
返回符合条件的数据
filter(键=值),filter(键=值)
exclude() 过滤掉符合条件数据
order_by() 排序
values() 一条数据就是是一个对象(字典),返回一个列表1234567
4 比较运算符
(1)概述: 实现where语句,作为filter() exclude() get()的参数
语法: 属性名称__运算符 = 值
外键: 属性名_id
转义: 类似like语句,是为了匹配占位,匹配数据中的%,sql中where like '\%'
filter(sname__contains = '%') (2)常见的比较运算符:
exact 判断,大小写敏感
filter(isDelete=False)
contains 是否包含,大小写敏感
stuList = Student.objects.filter(sname__contains ='孙' )
startswith 以value开头,大小写敏感
stuList = Student.objects.filter(sname__startswith ='孙' )
endwith 以value结尾,大小写敏感
in 是否包含在范围内 filter(pk__in=[2,4,6,8,10])
注: 以上四个前面加上i,就表示不区分大小写,iexact,icontains,istartswith,iendswith (3) 其他形式查询
为空判断:
isnull ,isnotnull 是否为空 filter(sname__isnull=Flase)
比较运算:
gt 大于
gte 大于等于
lt 小于
lte 小于等于
filter(sage_gt=30)年龄大于30
时间查询:
year/month/day/week_day/hour/minute/second filter(lastTime__year=2017)
跨关查询 处理join查询 模型类型__属性名__运算符(可选)
查询快捷 pk 代表的主键 123456789101112131415161718192021222324252627282930
5 F对象与Q对象
常见的聚合函数:
使用aggregate()函数返回聚合函数的值
Avg Count Max Min sum from dango.db.models import Max
maxAge = Student.objects.aggregate(Max('sage')) 找出学生年龄最大的 F对象
1 可以使用模型的A属性与B属性进行比较
from django.db.models import F,Q
def grades(request):
g = Grades.objects.filter(ggirlnum_gt=F('gboynum')) 找到女生人输大于男生人数的班级
2 支持F对象的算术运算 filter(ggirlnum_gt=F('gboynum')+20)
3 F对象的参数可以是跨表字段
models.Book.objects.filter(bread_num=F(''author_name'))
4 F对象参数如果是date/time,可以进行日期的加减运算:
models.Book.objects.filter(bpub_date__lt=F('bpub_date') + timedelta(days=5)) Q对象
概述 过滤器的方法中的关键字参数,,条件为And模式,采用逻辑或引入Q对象
需求 进行or查询,或查询
解决 使用Q对象 Q对象可以使用&(and)、|(or)操作符组合起来
studentList = Student.objects.filter(Q(pk__lt = 3)|Q(sage__gt=50)) pk_id小于3或年龄大于50岁
models.User.objects.filter(Q(username='老王') & Q(userpass='admin')) 条件与组合
models.User.objects.filter(~Q(username='老王')) 条件非表示取反
可以使用 &(and) |(or) ~(not) 结合括号进行分组,构造更复杂的Q对象
filter函数可以传递一个或多个Q对象作为位置参数,如果有多个Q对象,这些参数的逻辑为and 下面分享一个综合用法: def get(self, request, *args, **kwargs):
filters = request.GET
#找出符合customer的数据转成列表
Qs = [Q(customer=request.user.customer)]
try:
if 'limit' in filters:
limit = abs(int(filters['limit']))
if limit > 50:
limit = 50
else:
limit = 15
start_id = int(filters.get('start_id', 0))
#添加符合start_id的对象
Qs.append(Q(id__gt=start_id))
#添加符合状态的state
if 'state' in filters:
Qs.append(Q(state__in=filters['state']))
else:
Qs.append(Q(state__in=[0, 1, 2, 3, 4]))
#添加符合title的数据
if 'title' in filters:
Qs.append(Q(title__contains=filters['title']))
except Exception:
return params_error({"filters": "过滤参数不合法"}) #通过*Qs,对列表数据同时满足上述情况的数据进行总的帅选,并设置限制集
sets = Questionnaire.objects.filter(*Qs)[:limit]

Django学习总结②----关系运算与F,Q关系的更多相关文章

  1. 八、django学习之分组查询、F查询和Q查询

    分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a ...

  2. Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql

    0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...

  3. Django运算表达式与Q对象/F对象

    Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个函数,基于所给的参数限制查 ...

  4. Django 学习 之ORM聚合查询分组查询与F查询与Q查询

    一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...

  5. Django框架08 /聚合查询、分组、F/Q查询、原生sql相关

    Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...

  6. day20 FORM补充(随时更新),F/Q操作,model之多对多,django中间件,缓存,信号

    python-day20 1.FROM生成select标签的数据应该来源于数据库. 2.model 操作 F/Q  (组合查询) 3.model 多对多操作. 4.中间件 :在请求到达url前先会经过 ...

  7. Django之ORM操作(聚合 分组、F Q)

    Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作.   键的名 ...

  8. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数

        一.聚合函数    from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #导入    # .查询图书的总价,平均价,最大价,最小价 ...

  9. Django之model F/Q以及多对多操作

    model之F/Q操作 F操作,使用查询条件的值 打个比方吧,有一张表,保存着公司员工的工资,公司普涨工资,如何在model中操作,这就用到了F,首先需要导入此模块: from django.db.m ...

随机推荐

  1. java两种反射的区别 - Class.forName()和ClassLoader.loadClass()

    在理解这两种反射机制之前,需要弄清楚java类的加载机制. 装载:通过类的全限定名获取二进制字节流(二进制的class文件),将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lan ...

  2. mac使用brew安装配置常见测试工具

    Homebrew 包管理工具可以让你安装和更新程序变得更方便,目前在 OS X 系统中最受欢迎的包管理工具是 Homebrew. 安装 在安装 Homebrew 之前,需要将 Xcode Comman ...

  3. spring boot从redis取缓存发生java.lang.ClassCastException异常

    目录树 异常日志信息 错误原因 解决方法 异常日志信息 2018-09-24 15:26:03.406 ERROR 13704 --- [nio-8888-exec-8] o.a.c.c.C.[.[. ...

  4. ubuntu上建立本地git 和 网络 github的上传与下载

    github工具是一个很好用的工具,可以在本地建立一个git仓库,存储当前写的程序或者数据,然后通过ssh与github建立联系.具体怎么实现,下面进行介绍. 1.首先要安装git 软件 在Linux ...

  5. App 运行后屏幕顶部和底部各留黑边问题 - iOS

    App 启动后屏幕的顶部和底部各产生一条黑边,App 的内容会被压缩在两个黑条内显示,比例失调的情况. 初步判断是启动页资源图片适配问题. 首先,查看工程 project => General ...

  6. 第一个electron

    1 开发环境:node环境 2 下载electron:npm install electron --save-dev 3 package.json配置如下: { "name": & ...

  7. [译文][转载]greenlet:轻量级并发程序

    英文原文地址:https://greenlet.readthedocs.io/en/latest/中文翻译转载地址:https://zhuanlan.zhihu.com/p/25188731 背景 g ...

  8. app后端api设计【转】

    博客:https://blog.csdn.net/newjueqi/article/details/44037011 app和后端的交互,一般都是通过后端提供的api实现.api的设计,估计很多刚进入 ...

  9. STM32(13)——SPI

    简介: SPI,Serial Peripheral interface串行外围设备接口. 接口应用在:EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间. 特点 ...

  10. web頁面優化以及SEO

    轉載:https://blog.csdn.net/xustart7720/article/details/79960591 浏览器访问优化浏览器请求处理流程如下图: Etag:實體標籤.ETag是HT ...