【发布时间】:2019-08-14 20:28:15
【问题描述】:
我在 Flask 中有一个 HTTP POST 端点,它需要将任何数据插入到数据库中。该端点每秒最多可以接收数百个请求。每次有新请求到来时进行插入需要太多时间。我认为每 1000 个请求对所有先前的 1000 个请求数据进行一次批量插入应该像某种缓存机制一样工作。我尝试将 1000 个传入数据对象保存到某个集合中,然后在数组“满”后进行批量插入。
目前我的代码如下所示:
@app.route('/user', methods=['POST'])
def add_user():
firstname = request.json['firstname']
lastname = request.json['lastname']
email = request.json['email']
usr = User(firstname, lastname, email)
global bulk
bulk.append(usr)
if len(bulk) > 1000:
bulk = []
db.session.bulk_save_objects(bulk)
db.session.commit()
return user_schema.jsonify(usr)
我遇到的问题是数据库被“锁定”了,我真的不知道这是一个很好的解决方案,但实施得很差,还是一个愚蠢的想法。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
【问题讨论】:
标签: python sql api flask sqlalchemy