when using flask-sqlalchemy to manipulate the mysql database, the information filled in on the registration page cannot be added to the mysql database. The
code is as follows:
db2.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://comejack:123456@localhost:3306/flask"
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(80), unique = True, nullable = False)
password = db.Column(db.String(80), nullable = False)
email = db.Column(db.String(120), unique = True, nullable = False)
def __repr__(self):
return "<User %r>" % self.username
db.create_all()
forms.py
from wtforms.fields import BooleanField, TextField, StringField, PasswordField, SubmitField
from wtforms import validators
from wtforms.validators import DataRequired
from flask_wtf import FlaskForm
class RegForm(FlaskForm):
username = StringField("username", validators = [DataRequired()])
password = PasswordField("password", validators = [DataRequired()])
email = StringField("email", validators = [DataRequired()])
submit = SubmitField("Sign Up")
run.py
-sharp -*- coding:UTF-8 -*---
from flask import Flask, render_template, flash, redirect, request
from forms import LoginForm, RegForm
from flask_wtf.csrf import CSRFProtect
from forms import *
from db2 import *
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db.init_app(app)
CSRFProtect(app)
@app.route("/reg/", methods = ["GET","POST"])
def reg():
form = RegForm()
if form.validate_on_submit():
user1 = User(id = 1, username = form.username.data, password = form.password.data, email = form.email.data)
print (user1)
db.session.add(user1)
db.session.commit()
return render_template("reg.html", title = "Sign up", form = form)
app.run(host = "0.0.0.0", port = 9000, debug = True)
reg.html
{% extends "base.html" %}
{% block content %}
<h1>reg</h1>
<form action="" method="POST" name="reg">
{{form.csrf_token}}
please enter your username:<br>
{{form.username}} <br>
please enter your password:<br>
{{form.password}}<br>
please enter your email:<br>
{{ form.email }}<br>
{{ form.submit }}
</form>
{% endblock %}
after running python3 run.py, enter the registered username and password mailbox on the reg page. Click submit, and an error occurs
sqlalchemy.exc.OperationalError
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user [SQL: "INSERT INTO user (id, username, password, email) VALUES (?,?)"] [parameters: (1, "123123," 123123, "c122126.com")] (Background on this error at: http://sqlalche.me/e/e3q8)
how to solve this problem?