如何使用 Flask-SQLAlchemy 在不同的请求中保持会话打开

时间:2021-01-27 21:08:49

标签: sqlalchemy flask-sqlalchemy

我有一个通过 Flask-SQLAlchemy 与 postgres 数据库通信的 web 应用程序。
该应用程序成功地将单个图像添加/更新到数据库中。
func1_add_imagefunc2_add_image 的调用是通过来自 javascript 代码的单独 fetch 请求完成的。

# in python
db = sqlalchemy(session_options={'autocommit': False})
...
@bp.route('/api/v1_2/func1_add_image', methods=['POST'])
def func1_add_image():
    db.session.add(image1)
    db.session.commit()
...
@bp.route('/api/v1_2/func2_add_image', methods=['POST'])
def func2_add_image():
    db.session.add(image2)
    db.session.commit()
...

# in javascript
let queryUrl1 = MLJ.model.getUrlBase() + 'api/v1_2/func2_add_image';
await fetch(queryUrl1, fetchData1);
...
let queryUrl2 = MLJ.model.getUrlBase() + 'api/v1_2/func2_add_image';
await fetch(queryUrl2, fetchData2);

现在,我想在一次提交中添加多个图像。
所以我把代码改成下面这样,但是图片没有在数据库中添加/更新。

# in python
db = sqlalchemy(session_options={'autocommit': False})
...
@bp.route('/api/v1_2/func1_add_image', methods=['POST'])
def func1_add_image():
    db.session.add(image1)
    db.session.commit()

@bp.route('/api/v1_2/func2_add_image', methods=['POST'])
def func2_add_image():
    db.session.add(image2)
    db.session.commit()

@bp.route('/api/v1_2/func3_commit', methods=['POST'])
def func3_commit():
    db.session.commit()
...

# in javascript
let queryUrl1 = MLJ.model.getUrlBase() + 'api/v1_2/func2_add_image';
await fetch(queryUrl1, fetchData1);
...
let queryUrl2 = MLJ.model.getUrlBase() + 'api/v1_2/func2_add_image';
await fetch(queryUrl2, fetchData2);
...
let queryUrl3 = MLJ.model.getUrlBase() + 'api/v1_2/func3_commit';
await fetch(queryUrl3, fetchData3);

从我读到的enter image description here...用于建立与请求相关联的单个会话的基础设施,该会话被正确构建并在请求结束时相应地拆除” 会话是根据请求创建和拆除的。
所以这可能就是更改没有持久化到数据库中的原因。

使用 Flask-SQLAlchemy,如何在不同的请求中保持会话打开?

谢谢

0 个答案:

没有答案