python - 使用 Flask before_request 和 after_request 的原子事务
问题描述
我正在尝试通过使用启动事务并提交或回滚来使用Flask atomic进行py2neo事务,具体取决于响应状态代码。before_request
after_request
这是我的代码:
from flask import Flask, request, app, g
from flask_restful import Resource, Api, abort
from werkzeug.wrappers import Request
from py2neo import Graph
import models
app = Flask(__name__)
api = Api(app)
def get_db():
return Graph(password="secret")
graph = get_db()
tx = None
@app.before_request
def before_request():
tx = graph.begin()
@app.after_request
def after_request(response):
if response.status_code >= 400:
tx.rollback()
else:
tx.commit() # Error line
问题是对模块变量的修改tx
似乎before_request
不明显after_request
,所以我得到这个错误:
AttributeError: 'NoneType' object has no attribute 'commit'
解决方案
我找到了解决方案。我所要做的就是使用烧瓶 g
对象进行存储tx
,以便它可以用于沿请求调用的所有方法:
from flask import Flask, request, app, g
from flask_restful import Resource, Api, abort
from werkzeug.wrappers import Request
from py2neo import Graph
import models
app = Flask(__name__)
api = Api(app)
def get_db():
return Graph(password="SteppenWolf1")
graph = get_db()
@app.before_request
def before_request():
g.tx = graph.begin()
@app.after_request
def after_request(response):
tx = g.get('tx')
if response.status_code >= 400:
tx.rollback()
else:
tx.commit()
return response
推荐阅读
- java - 通过组合两个查询结果进行分页
- c# - Xamarin Forms 在导航栏下方创建一个标签
- python - 1)如何在 pandas Bokeh 中切换科学记数法(使用 plot_bokeh 函数)和 2)如何将颜色居中为 0(所以白色为 0)
- sql - Postgres - 在转义双引号内转义双引号
- node.js - 我的 REST API 与 POSTMAN 一起正常运行,但在从前端服务器/客户端服务器调用时无法处理请求
- javascript - 如何将我的输入值存储在变量中并在本地存储数据
- python - python中的映射、求和和条件
- reactjs - React Modal 仅在我单击背景或关闭图标时关闭?
- python - 正确安装 micropython 库(BNO055/IMU)
- git - Git rebase 因在当前分支中发生冲突而无法正常工作