我有一个通过 Flask-SQLAlchemy 与 postgres 数据库通信的 web 应用程序。
该应用程序成功地将单个图像添加/更新到数据库中。
对 func1_add_image
、func2_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);
从我读到的
“...用于建立与请求相关联的单个会话的基础设施,该会话被正确构建并在请求结束时相应地拆除”
会话是根据请求创建和拆除的。
所以这可能就是更改没有持久化到数据库中的原因。
使用 Flask-SQLAlchemy,如何在不同的请求中保持会话打开?
谢谢