実現したいこと
YouTubeでいまにゅさんの動画を参考(https://www.youtube.com/watch?v=VtJ-fGm4gNg&t=5383s)にflaskとPythonを使った記事投稿サイトを作成してます。
前提
indexページ表示時に以下のメッセージが表示されます。
発生している問題・エラーメッセージ
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: post [SQL: INSERT INTO post (title, body, created_at) VALUES (?, ?, ?)] [parameters: ('f', 'a', '2023-04-23 20:30:29.259175')] (Background on this error at: https://sqlalche.me/e/20/e3q8)
該当のソースコード
Python
1from flask import Flask 2from flask import render_template, request, redirect 3 4from flask_sqlalchemy import SQLAlchemy 5from datetime import datetime 6 7import pytz 8 9app=Flask(__name__) 10# configure the SQLite database, relative to the app instance folder 11app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///blog.db" 12 13# create the extension 14db = SQLAlchemy(app) 15 16class Post(db.Model): 17 id = db.Column(db.Integer, primary_key=True) 18 title = db.Column(db.String(50), nullable=False) 19 body = db.Column(db.String(300), nullable=False) 20 created_at=db.Column(db.DateTime, nullable=False, default=datetime.now(pytz.timezone('Asia/Tokyo'))) 21 22@app.route('/') 23def index(): 24 return render_template('index.html') 25 26@app.route('/create',methods=['GET','POST']) 27def create(): 28 if request.method == 'POST': 29 30 title = request.form.get('title') 31 body = request.form.get('body') 32 33 post=Post(title=title, body=body) 34 35 db.session.add(post) 36 db.session.commit() 37 38 return redirect('/') 39 40 41 else: 42 return render_template('create.html')
試したこと
下記のようにdb.session.commit())をコメントアウトして、実行しました。
db.session.add(post) # db.session.commit()
commit()を実行していないので、新規記事の反映されませんでしたが、エラーもなくredirectされました。
補足情報(FW/ツールのバージョンなど)
Python 3.10.6
Visual Studio Codeを使用しています。
あなたは このコードをどのように配置していますか?
app.py というファイルに上記のコードを書きました。
あなたは flaskをどのように起動していますか?
Visual Studio Codeで'' ''Flask02' というファイルを開き、ターミナルで
export FLASK_APP=app
flask --app app run --debug
として、実行しています。
あなたが実行している環境 では、blog.db をどのように作成しましたか? そのファイルはどこにありますか?
blog.bdはターミナルで
python3とし、対話モードにし
from app import bd
bd.create_all())
とすることで、instanceというフォルダが作成され、その中にblog.bdというファイルが作成されました。

回答1件
あなたの回答
tips
プレビュー