如 docs 中所述,当 api 无法解析驱动程序时,会发生
OperationalError
。从您的代码来看,一种可能的故障排除可能是在 app.py 中重命名这一行:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite' # <--- remove this
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'# <--- add this
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
原因: 连接可能未建立良好,并且必须无法创建所需的数据库。上述建议的编辑可能会解决此问题
编辑:如果上述答案不适合您,请查看此答案。
如果这是您第一次构建此应用程序,则您可能从未创建过数据库。
我正在关注 Flask Mega 教程,并遇到了与您类似的错误:
qlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: todo
在本教程中有一个关于创建迁移脚本的部分,我无法开始工作,所以我跳过了它。 显然这会创建数据库。 所以我的解决方案是从 Python 控制台运行以下代码:
from app import db
from app.models import User, Posts
db.create_all()
u = User(username='admin', email='[email protected]')
db.session.add(u)
db.session.commit()
添加第一条记录 为了在数据库中添加第一条记录并避免上述错误,您拥有index.html的第一条路线在第一次运行时不应有与数据库相关的任何内容:
@app.route('/')
def home():
return render_template("index.html")
首次运行并添加第一条记录(来自网络)后,您现在可以在主页上添加与数据库相关的任何内容。
@app.route('/')
def home():
posts = TaskPost.query.all()
return render_template("index.html", all_posts=posts)
您可以在下面的类定义之后添加以下行来创建/初始化数据库
class Todo(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
complete = db.Column(db.Boolean)
with app.app_context():
db.create_all()