gpt4 book ai didi

python - sqlite同时多次写入

转载 作者:行者123 更新时间:2023-12-04 15:36:26 25 4
gpt4 key购买 nike

我正在用 sqlite 数据库制作一个 python Flask 应用程序
有没有办法为写请求创建一个队列,以便它可以顺利运行,因为 SQLITE 不支持多个并发写入或提交

这是我的连接字符串

engine = create_engine('sqlite:///IT_DataBase.db',
connect_args={'check_same_thread': False})
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()

这是作为示例的提交代码:
@app.route('/NewRequest', methods=['GET', 'POST'])
@login_required
def NewRequest():
connUser=session.query(User).filter(User.id==Session.get('user_id')).one()
if request.method == 'GET':
Types = session.query(Req_Type.id,Req_Type.Type_name)
Pr = session.query(Req_Priorities.id,Req_Priorities.Priority_name)
return render_template('NewRequest.html',conn=connUser ,name=current_user.name, items=Types,priorities=Pr)
else:
name= request.form['Name']
Description= request.form['Description']
Type = request.form.get('Type')
Priority = request.form.get('Priority')
newRequest = Requests(name=name, Record_Created=datetime.now().strftime("%Y-%m-%d %H:%M"), Description=Description, Assigned_To=None, Type_Name=str(Type), Priority_Name=str(Priority), Status_Name='Opened', User_ID=Session.get('user_id') )
session.add(newRequest)
flash('New Request With Name %s Successfully Created' % newRequest.name)
session.commit()
UserRequests= session.query(Requests).filter_by(User_ID=Session.get('user_id')).filter(Requests.Status_Name!='Solved').all()
return render_template('ReqData.html',conn=connUser , title='User Requests', rows=UserRequests)


我认为,如果我们不更改数据库引擎,解决方案要么是将提交排队,但我不知道如何
或者在提交之前让 flask 等待随机时间,但我认为这会使性能变差
我该怎么办

最佳答案

您需要序列化提交。创建一个如下所示的锁。

from threading import RLock

sql_lock = RLock()

像下面这样包装 session.add 和 session.commit。 lock.acquire()将在另一个线程获取锁但尚未释放锁时阻塞代码。这确保在 acquire() 之间只有一个线程(或没有线程)正在运行和 release()每时每刻。
    try:
sql_lock.acquire()
session.add(newRequest)
session.commit()
finally:
sql_lock.release()

关于python - sqlite同时多次写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59588358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com