错误:sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表:

问题描述 投票:0回答:4
python-3.x flask-sqlalchemy
4个回答
0
投票

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

原因: 连接可能未建立良好,并且必须无法创建所需的数据库。上述建议的编辑可能会解决此问题

编辑:如果上述答案不适合您,请查看此答案


0
投票

如果这是您第一次构建此应用程序,则您可能从未创建过数据库。

我正在关注 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()

0
投票

添加第一条记录 为了在数据库中添加第一条记录并避免上述错误,您拥有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)

0
投票

您可以在下面的类定义之后添加以下行来创建/初始化数据库

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()
© www.soinside.com 2019 - 2024. All rights reserved.