如何更改 Flask Python 站点上 SQLAlchemy 数据库中的数据值?

问题描述 投票:0回答:1

我正在构建一个简单的 Flask python 网站,基本思想是用户每次按下按钮都会收到 1 分。有一个简单的登录系统,稍后我将为其添加密码。

目前,当用户按下按钮时,我无法更改 SQLAlchemy 数据库中 score 列的值。这是代码:

from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.secret_key = "nicetry"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite3'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.permanent_session_lifetime = timedelta(minutes=5)

db = SQLAlchemy(app)

class users(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    name = db.Column(db.String(100)) 
    email = db.Column(db.String(100))
    score = db.Column(db.Integer)

    def __init__(self, name, email, score):
        self.name = name
        self.email = email
        self.score = score


@app.route("/clicker")
def clicker():
    return render_template("clicker.html") #This opens a page with a button, when the button is clicked it runs buttonclick() below:

@app.route('/buttonclick', methods=['POST']) 
def buttonclick():
    print("button pressed")
    # HERE!
    return 'Success'

未显示网站的其余部分,包括用户输入用户名和电子邮件地址的登录过程,以及非常基本的 HTML/CSS。

我不确定如何格式化 UPDATE 代码行(在上面的块中用 # HERE! 标记)。大多数数据库内容完全来自教程,我仍在进一步了解它的工作原理。每次按下按钮(buttonclick())时,如何将用户的分数更改为一?

任何帮助表示赞赏!

python database flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

要更新用户分数,首先需要使用user_id调用api。然后通过user_id找到用户并更新分数。

@app.route('/buttonclick', methods=['POST'])
def buttonclick():
    # you can use in on path ex /<int:user_id>/buttonclick
    user_id = request.json.get("user_id")
    # find user by id, use with_for_update() to lock query, avoid multi request coming 
    user = users.query.filter_by(_id=user_id).with_for_update().first()
    user.score += 1
    db.session.commit()
    return 'Success'
© www.soinside.com 2019 - 2024. All rights reserved.