博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random...
阅读量:5345 次
发布时间:2019-06-15

本文共 922 字,大约阅读时间需要 3 分钟。

sqlalchemy和flask-sqlalchemy之间的东西不是太清晰。

sqlalchemy文档太他妈多了。日。

今天遇到的实例。

用户进行随机匹配,系统随机返回一个一定筛选条件下的用户。为了用户体验,还得去掉已关注的人。

首先获取满足筛选条件的用户列表:

users = User.query.filter_by(school=form.school.data, sex=form.sex.data, status=form.status.data).all()
且要获取已关注用户列表:

followed = g.user.followed.all()

重点来了,怎样用第一个列表减还有一个列表?没这样的method,用for循环和if推断,时间复杂度应该超级大。

所以,应该先列表转集合然后集合求差集再转列表。

filter_users = list(set(users) - set(followed))    # 列表转集合求差集再转列表
然后我们就要開始随机选一个用户了。找到python random模块的文档,发现choice()不错,在序列中随机选一个。

注意,假设是空序列。会报错。

所以,以下的代码为:

if filter_users:                user = random.choice(filter_users)                flash(u'您匹配到的用户例如以下:')                return redirect(url_for('profile', id=user.id))            else:                flash(u'啊哦,没有满足此条件的用户')    # 以后用吉祥物来表现。不要用flash                return render_template('match.html', form=form)

以上。

今天学到的东西不少,什么hash,数据结构,时间复杂度都出来了。

屌。

转载于:https://www.cnblogs.com/gcczhongduan/p/5084088.html

你可能感兴趣的文章
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
Linux目录结构
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
(转)接口测试用例设计(详细干货)
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>