sqlite3.OperationalErrorについて

前提・実現したいこと

python初心者です。
現在こちらのを動画(https://www.youtube.com/watch?v=jP7p2okKdJA)を参考にPythonのFlaskを使って、タスク管理を行えるwebアプリを作成しています。
そして今は、25分目あたりのタスクを作成したらデータベースにタスクを保存するコードと保存されているタスクを表示するコードを書いています。

発生している問題・エラーメッセージ

タスクを登録するページ(Create.html)で内容を入力した後、Createボタンを押すと、本来であればトップページ(index.html)が問題なく表示されるのですが、sqlite3.OperationalError: no such table:post というようなエラーが表示されてしまいます。

エラー文を調べてみたのですが、自力で解決に至らなかったため質問させていただきました。
アドバイスお願い致します。

sqlite3.OperationalError:no such table:post

気になる点

ほとんど動画の通りに進んでいるのですが、唯一違うところがあります。それは、db.create_allする際にinstanceフォルダが生成され、その中にdbファイルが出来ていたことです。これも原因の1つなのでしょうか。

該当のソースコード

・app.py

lang

from datetime import datetime from flask import Flask, render_template, request, redirect from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' db = SQLAlchemy(app) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(30), nullable=False) #30字以内のタイトル detail = db.Column(db.String(100)) #100字以内の詳細 due = db.Column(db.DateTime, nullable=False) #期限 @app.route('/', methods=['GET', 'POST']) #トップページ def index(): if request.method == 'GET': posts = Post.query.all() #投稿すべてを取り出してくる return render_template('index.html', posts=posts) else: title = request.form.get('title') #formから送られてきた内容を受け取る detail = request.form.get('detail') due = request.form.get('due') due = datetime.strptime(due, '%Y-%m-%d') #ハイフンつなぎの日付に変更 new_post = Post(title=title, detail=detail, due=due) db.session.add(new_post) #データベースにデータを保存 db.session.commit() return redirect('/') @app.route('/create') #タスクを作成するページ def create(): return render_template('create.html') if __name__ == '__main__': app.run(debug=True)

・index.html

lang

{% extends 'base.html' %} {% block body %} <h1>extend!!!</h1> {% endblock %}

・base.html

lang

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> {% block head %}{% endblock %} </head> <body> {% block body %}{% endblock %} </body> </html>

・create.html

lang

{% extends 'base.html' %} {% block body %} <form action="/" method="POST"> <label for="title">Title</label> <input type="text" name="title"> <label for="detail">Detail</label> <input type="text" name="detail"> <label for="due">Due</label> <input type="date" name="due" required> <input type="submit" value="Create"> </form> {% endblock %}

試したこと

・誤字脱字の確認
・テーブル名の指定

補足情報

バージョン
Python:3.11.0
OS:Windows10
ブラウザ:Microsoft Edge

コメントを投稿

0 コメント