Flask SQLAlchemy查询对象不反映数据库

2024-04-20 04:39:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个简单的Flask应用程序,它利用Flask SQLAlchemy和WTForms。目标是有一个简单的表单,在提交时将信息推送到数据库,并在表单底部显示数据库中的当前条目。理想情况下,在提交表单信息时,我希望推送到数据库的信息立即反映在同一页面上。以下是我目前拥有的:

from flask import Flask, render_template, redirect, url_for, request
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, Length
from flask_sqlalchemy  import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://(REMOVED FOR QUESTION)/testing'
app.config['SECRET_KEY'] = 'abcd'
Bootstrap(app)
db = SQLAlchemy(app)

class ActivityPanel(FlaskForm):  #WTF FORM DEFINITION
    text_title = StringField('Text Info', validators=[InputRequired()])


class Alerts(UserMixin, db.Model):  #FLASK SQL ALCHEMY DEFINITION
    InputID = db.Column(db.Integer, primary_key = True, autoincrement=True)
    text_alert = db.Column(db.String(100), nullable = False, server_default="None")
db.create_all()

@app.route('/alerts', methods=['GET', 'POST'])
def alerts1():
    form = ActivityPanel()
    if form.validate_on_submit():
        alert_object = Alerts(text_alert=form.text_title.data)
        db.session.add(alert_object)
        db.session.commit()
    database_pull = Alerts.query.all()
    return render_template('test.html', form = form, database_pull=database_pull)



if __name__ == '__main__':
    app.run()

模板的代码如下:

^{pr2}$

从目前的情况来看,我遇到的主要问题是,获取数据库中所有内容的数据库查询pull对象只在flask程序启动时获取并存储在数据库中的信息。一旦启动,即使我向数据库添加了更多数据,查询对象也不会反映新添加的信息。最后,我必须关闭应用程序并重新启动它,以便对象使用新的数据库条目进行更新。在

我希望有人能回答,如果有一个简单的方法,我允许数据库拉对象从数据库实时抓取内容,而不是一开始。根据我所读到的,这个问题与SQLAlchemy在每个事务中更新一次对象的状态有关。我试图使对象过期/刷新会话,但它不适用于Flask SQLAlchemy。如有任何帮助,我们将不胜感激。在


Tags: 对象textfromimportform信息数据库app