@magine
        
        2015-02-05T08:15:33.000000Z
        字数 888
        阅读 1048
    实习日记
来看一段flask代码:
from flask import request, render_templatefrom ..models import User, UserLogapp = Flask(__name__)@app.route('/logs1')def logs_1():paginator = log_paginator()user_ids = {log.user_id for log in paginator.items}users = {id: User.query.get(id) for id in user_ids}return render_template('logs.html',paginator=paginator,users=users,)@app.route('/logs2')def logs_2():paginator = log_paginator()user_ids = {log.user_id for log in paginator.items}users_q = User.query.filter(User.id.in_(user_ids))users = {user.id: user for user in users_q}return render_template('logs.html',paginator=paginator,users=users,)def log_paginator():q = UserLog.query.order_by(UserLog.id.desc())page = force_int(request.args.get('page', 1), 1)return q.paginate(page, per_page=30)
这是我在公司后台代码中抽出来的一段代码的两个版本,略作了修改。 
logs_1()是我最初写的,logs_2()是lepture前辈review到我的代码后修改的。 
第二种写法明显减少了数据库的查询次数。
这个故事教育我们,不要在循环中查询数据库(get()),而应对查询数据库的结果(filter_by())使用循环。