Python 我可以向SQLAlchemy数据库添加一个字段,但给出;操作错误“;在添加另一个字段时

Python 我可以向SQLAlchemy数据库添加一个字段,但给出;操作错误“;在添加另一个字段时,python,html,flask,sqlalchemy,wtforms,Python,Html,Flask,Sqlalchemy,Wtforms,我正在尝试创建一个简单的数据库,以使用SQLAlchemy和Flask接受用户的姓名和反馈。如果我的db_models.py文件中只有“反馈”,那么该网站运行良好。但是,如果添加“name”字段,则会发生错误。我不知道发生了什么,因为我以前没有使用过数据库。任何帮助都将不胜感激 这是我的init.py文件- from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.conf

我正在尝试创建一个简单的数据库,以使用SQLAlchemy和Flask接受用户的姓名和反馈。如果我的db_models.py文件中只有“反馈”,那么该网站运行良好。但是,如果添加“name”字段,则会发生错误。我不知道发生了什么,因为我以前没有使用过数据库。任何帮助都将不胜感激

这是我的init.py文件-

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'anjh23op94q2pm5h'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

from vedicm import routes

这里是routes.py

from flask import render_template, url_for, flash, redirect
from vedicm import app, db
from vedicm.forms import FeedbackForm
from vedicm.db_models import FB


@app.route("/", methods=['GET', 'POST']) 
def home():
    form = FeedbackForm()    #A wt form in Flask
    if form.validate_on_submit():
        fb = FB(feedback = form.feedback.data, name = form.name.data) 
        db.session.add(fb)
        db.session.commit()  #Here, all the problem occurs
        flash(f'Feedback Submitted', 'success')
    return render_template("home.html", form=form, title = 'Vedic Mishra')

@app.route("/feedbacks", methods=['GET', 'POST'])
def feedbacks():
    fbs = FB.query.all()
    return render_template("feedbacks.html", title='Feedbacks', feedbacks = fbs)

这是forms.py

from vedicm import db

class FB(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    feedback = db.Column(db.String(100), nullable=False)
    name = db.Column(db.String(25))

    def __repr__(self):
        return f"FB('{self.feedback}', '{self.name}')"

我通过run.py运行此应用程序,出现以下错误

**sqlalchemy.exc.OperationalError**

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table FB has no column named name
[SQL: INSERT INTO "FB" (feedback, name) VALUES (?, ?)]
[parameters: ('Vedic', 'Vedic')]
(Background on this error at: http://sqlalche.me/e/e3q8)

数据库和python程序是两种不同的东西。您的程序正在访问数据库(这是sqlite:///site.db). 但是您的程序认为表FB有colunms id,feedback,name,而实际上它只有列id,feedback

您一定是以某种方式创建了数据库,可能是在python解释器中执行了类似的操作:

from vedicm import db
db.create_all()
在文件site.db中创建数据库的。后来,您对模型(FB类)进行了更改,但数据库没有更新。这有意义吗

现在怎么办?最简单的解决方案可能是删除site.db并再次执行db.create_all()。但是,您将丢失到目前为止生成的数据。另一种可能是使用外部工具连接到数据库文件并在那里进行更新。但是,正如你对数据库一无所知一样,我想,这太难了

最后,当您对这些东西稍微熟悉一点时,您肯定应该研究数据库迁移,有一个非常好的sqlalchemy工具叫做alembic