Ошибка сбора пользовательского ввода с помощью простых Flask форм (sqlalchemy.ex c .OperationalError) - PullRequest
0 голосов
/ 14 апреля 2020

Здравствуйте, я довольно новичок в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...