Flask와 Flask-Sqlalchemy를 사용하여 Sqlite 데이터베이스에서 무작위로 선택된 행을 업데이트하려고했습니다. "word", "yes"및 "no"라는 열이있는 데이터베이스의 행이 몇 개 있습니다. 여기서 word는 문자열이고 yes 및 no는 정수입니다. "투표"보기에는 두 가지 버튼이 있습니다 (예 및 아니오). 버튼을 누르면 해당 코드가 실행되고 예 또는 아니요 열이 증가해야하며보기가 Word 표의 새로운 임의의 단어로 업데이트됩니다.Flask-Sqlalchemy를 사용하여 DB에서 임의의 행을 업데이트하십시오.
@app.route("/vote", methods=["GET", "POST"])
def vote():
#Get random row from database
query = db.session.query(Word)
rowCount = int(query.count())
row = query.offset(int(rowCount*random.random())).first()
#POST
# If "yes" button is pressed, increment yes column in database
if request.method == "POST":
if request.form.get("yes"):
row.yes += 1
db.session.commit()
return render_template("vote.html", row=row)
# otherwise increment no column
elif request.form.get("no"):
row.no += 1
db.session.commit()
return redirect(url_for("vote"))
#GET
# on get request, render vote.html
return render_template("vote.html", row=row)
이 코드는 작동하지만 예 및 아니요 열은 다음 번에 임의의 단어로 돌아갈 때만 업데이트됩니다. 단추를 클릭 한 직후에 브라우저를 닫으면 데이터베이스가 증가하지 않습니다. db.session.commit()과 관련이 있거나 세션에 관한 내용이 있다고 생각합니다.
row.yes += 1
이 세션 객체에 저장하지만, 해당 데이터베이스 행이 다음 번에 조회 할 때 최선을 다하고 있습니다 : 것 같다. 이 쿼리와 함께 4의 id를 가진 행을 반환
row = Word.query.get(4)
에서, 예 또는 아니오 열이 즉시 업데이트 : 내가 가진 방법의 상단에있는 쿼리를 교체 할 때이 코드는 작업을했다.
의견이 있으십니까?
감사
귀하의 증분은 경쟁 조건에 취약합니다. 데이터베이스에서 증가분을 처리하도록해야합니다. 'row.yes = Word.yes + 1' – dirn