flask---第一篇 Flask中的全局变量 flask 中的钩子函数  SQLAlchemy有查询过滤器如下:  防止sql注入 Flask-sqlalchemy总结:

current_app  程序上下文  当前激活程序的程序实例

g         程序上下文  当前请求时程序实例

request      请求上下文  请求对象,封装了客户端发的http请求中的内容

session     请求上下文  用户会话,用于存储请求之间需要记住的值的词典


flask 中的钩子函数

  • before_first_request
  • before_request
  • after_request
  • teardown_request

钩子函数的典型的应用场景是:

  在一次请求中通过before_first_request来获取到用户数据存储到Context中,以后的请求就可以直接从Context中获取到用户的数据了

 SQLAlchemy有查询过滤器如下:

过滤器 说明
filter() 把过滤器添加到原查询,返回新查询
filter_by() 把等值过滤器添加到原查询,返回新查询
limit() 使用指定值限制原查询返回的结果数量,返回新查询
offset() 偏移原查询返回的结果,返回新查询
order_by() 排序返回结果,返回新查询
groupby() 原查询分组,返回新查询
all() 以列表形式返回结果
first() 返回第一个结果,如果没有返回None
first_or_404() 返回第一个结果,如果没有抛出404异常
get() 返回主键对应记录,没有则返回None
get_or_404() 返回主键对应记录,如果没有抛出404异常
count() 返回查询结果数量
paginate() 返回paginate对象,此对象用于分页     传入参数(index,limit)
filter指定列名的时候,可以不使用类名;filter_by也不是说任何时候都可以不指定类名
我平时使用的时候,两者区别主要就是当使用filter的时候条件之间是使用“==",fitler_by使用的是"="。
user1 = session.query(User).filter_by(id=1).first()
user1 = session.query(User).filter(id==1).first()

利用 Flask-sqlalchemy 求列表的和

li = [1,2,3,4]

sum_cash = db.session.query(func.sum(TUserloanLog.change_cash)).filter(and_(TUserloanLog.change_reason == 4,TUserloanLog.id.in_(li)))

最后的sum_cash 是 id 在 li 里 and  change_reason为4,change_cash的和

print sum_cash   [(result,)]


flask 一次查询两个表

query = db.session.query(TTradeCostDiffBalance, TUserOrder).filter(TTradeCostDiffBalance.order_id == TUserOrder.order_id)


sqlalchemy中我们在  delete、update 的时候加上synchronize_session=False  

注意点:我们在删除记录时,默认会尝试删除session中符合条件的对象,in 操作还不支持,解决办法就是删除时不同步,加上(synchronize_session=False  )

session.query(User).filter(User.id.in_((1, 2, 3))).delete(synchronize_session=False)

session.commit()

# or session.expire_all()

在當前的工程裏的terninal  輸入 pip freeze > requirements.txt  就會在當前工程裏面生成一個 此項目所需要的各種插件的名陳以及版本號


 防止sql注入

db = SQLAlchemy(app)
conn = db.session.connection()

@app.route('/')
def index():
    rv = conn.execute('select * from test where id = %s', [1])
    return jsonify(rv)

Flask-sqlalchemy总结:

用户的提现申请的统计:

  TUserAssetLog.change_reason == x(提现)

  TUserAssetsLog.change_frozen_cash(提现金额)

query = db.sesssion.query(func.sum(TUserAssetsLog.change_frozen_cash),

      func.count(distinct(TUserAssetLog.uid))).filter(TUserAssetLog.change_reason == x)