Здравствуйте, я довольно новичок в Flask Микрофреймворке, я создаю учебный проект в flask, но после ввода информации проблема выглядела так, что
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
[SQL: INSERT INTO user (name, "Favcolor", animal) VALUES (?, ?, ?)]
[parameters: ('Chetan', 'Black', 'Cats')]
(Background on this error at: http://sqlalche.me/e/e3q8)
, читая некоторые документы, которые я понял это проблема проверки формы, как я могу решить это? Основная цель - просто взять данные из пользовательской формы и сохранить их в базе данных форм, избегая дублирования
Main_file.py
from flask import Flask, render_template, flash, request
from flask_sqlalchemy import SQLAlchemy
from models import info
app= Flask(__name__,template_folder='templates')
app.config['SECRET_KEY'] = '5fr1d5fd42vg5df445d4s52xz1x13c'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ ='user'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(50),unique=True,nullable=False)
Favcolor = db.Column(db.String(50),nullable=False)
animal = db.Column(db.String(5),nullable=False)
def __repr__(self):
return f"User('{self.name}','{self.Favcolor}','{self.animal}')"
@app.route("/",methods=['GET','POST'])
def hello():
form = info()
if request.method == "POST":
if form.validate_on_submit():
content = User(name=form.name.data , Favcolor=form.Favcolor.data, animal=form.animal.data)
db.session.add(content)
db.session.commit()
flash(f" Submitted information for {form.name.data}-{form.Favcolor.data}-{form.animal.data}",'success')
else:
print("failure")
print(form.errors)
return render_template('frontend.html', title='Trial_project', form=form)
if __name__=="__main__":
app.run(debug=True,port=5002)
Models.py
from flask_wtf import FlaskForm
from wtforms import StringField, RadioField, SubmitField
from wtforms.validators import DataRequired, Length
class info(FlaskForm):
name =StringField('Name',validators=[DataRequired(),Length(min=2,max=50)])
Favcolor = StringField('Favorite Color', validators=[DataRequired(), Length(min=2, max=50)])
animal = RadioField('Pet Animal', choices=[('Cats', 'Cats'), ('Dogs', 'Dogs')])
submit = SubmitField('Submit')
внешний интерфейс. html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='main.css') }}">
{% if title %}
<title>Flask Project - {{ title }}</title>
{% else %}
<title>Flask Project</title>
{% endif %}
</head>
<body>
<div class="col-25">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
</div>
<div class="container">
<form action="" method="POST">
{{ form.hidden_tag() }}
<div class="row">
{{ form.name.label(class="form-control-label") }}
{{ form.name(class="form-control form-control-lg", placeholder="Please Enter Your Name") }}
</div>
<div class="row">
{{ form.Favcolor.label(class="form-control-label") }}
{{ form.Favcolor(class="form-control form-control-lg",placeholder="Favorite Color") }}
</div>
<div class="row">
{{ form.animal.label(class="form-control-label") }}
{{ form.animal() }}
</div>
<div class="row">
{{ form.submit() }}
</div>
</form>
</div>
</body>
</html>