从烧瓶wtforms提交表单后,SQLite数据库未更新



这些是我的不同文件,但不是全部。在我提交表格之前,一切都很好。我怀疑这与数据库的链接有关,如果这有意义的话?#init.py

import os
from os import path
from venv import create
from flask import Flask, render_template, flash, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from auth import auth
from models import db
from main import app
basedir = os.path.abspath(os.path.dirname(__file__))
DB_NAME = "bookings.sqlite"
app.config['SECRET_KEY'] = 'Thisissupposedtobesecret!'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, DB_NAME)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.register_blueprint(auth, url_prefix="/")
db.init_app(app)
def create_database(app):
if not path.exists('V3/' + DB_NAME ):
db.create_all(app=app)
create_database(app)
if __name__ == '__main__':
app.run(debug=True)

#forms.py

from flask_wtf import FlaskForm
from wtforms import (StringField, BooleanField, DateTimeField,
RadioField,SelectField,
TextAreaField,SubmitField)
from wtforms.validators import DataRequired
class SignUpForm(FlaskForm):
name = StringField("Your FULL Name", validators=[DataRequired()])
(form questions)
submit = SubmitField("Book")

#型号.py

from main import app
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy(app)
Migrate(app,db)
class Booking(db.Model):
__tablename__ = "bookings"
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.Text)
(other colums)
def __init__(self,name):
self.name = name

已尝试提交成功但未在数据库中更新的表单

您需要推送上下文以便访问数据库https://flask.palletsprojects.com/en/2.0.x/appcontext/

def create_database(app):
if not path.exists('V3/' + DB_NAME ):
with app.app_context():
db.create_all()

在models.py下添加

def __init__(self,name,x,y,z):
self.name = name
self.x = x
self.y = y
self.z = z

在auth.py下添加

if request.method == 'POST':
name = form.name.data
x = form.x.data
y = form.y.data
z = form.z.data


new_booking = Booking(name=name,x=x,y=y,z=z)
db.session.add(new_booking)
db.session.commit()

return redirect(url_for('auth.bookings'))
else:
return render_template('bookings.html', form=form)

这已经解决了问题,虽然我不完全理解为什么,但它解决了

最新更新