我收到这个sqlalchemy.exc.OperationalError之前提交到网站的伪用户信息.如何解决此错误



执行后,我收到一个sqlalchemy.exc.OperationalError。我在某个地方读到,这个异常是由于与数据库操作相关的错误而引发的,不一定在程序员的控制下,例如发生意外断开连接、找不到数据源名称、无法处理事务、处理过程中发生内存分配错误等。但我没有解决这个错误。

我的__init__.py文件:

from flask import Flask
from flask_bcrypt import Bcrypt
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = '5791628bb0b13ce0c676dfde280ba245'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
# Beware of circular imports
from smashpass import routes

我的路线片段:

def register():
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user = User(username=form.username.data, email=form.email.data, password=hashed_password)
db.session.add(user)
db.session.commit()
flash(f'Hey {form.username.data} welcome!!', 'primary')
return redirect(url_for('login'))
return render_template('register.html', title='REGISTER', form=form)

最后,这里是用户模型:

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.image_file}')"

这是我在提交伪数据后收到的运行时错误:

sqlalchemy.exc.OperationalError
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
[SQL: INSERT INTO user (username, email, image_file, password) VALUES (?, ?, ?, ?)]
[parameters: ('Hilario', 'hnengare@gmail.com', 'default.jpg', '$2b$12$TpOJBUhD/4Kwi5KePltYjOX8rN1GR6NgrL7V5GAYnDqKXgcHoMBMi')]
(Background on this error at: http://sqlalche.me/e/13/e3q8)

其中一条评论建议我忘记实现dB.create_all((,这解决了我的问题。要创建初始数据库,只需从交互式Python shell导入db对象,然后运行SQLAlchemy.create_all((方法来创建表和数据库:

Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] on win32
>>> from smashpass import db
>>> db.create_all()

谢谢。

相关内容

最新更新