質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

1回答

1317閲覧

sqlalchemy.exc.OperationalError: no such table: entriesの解決

yanya

総合スコア1

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2021/07/08 05:38

編集2022/01/12 10:55

前提・実現したいこと

flaskを使ってブログ投稿機能を作り、ブログ一覧機能を作りたいです。
『ゼロからわかるflaskの教科書』の「CRUDにおけるread」の「show_entriesビューで全ての記事をデータベースから取得」を学習していた際に以下のようなエラーが派生しました。エラー原因がentriesのテーブルが作成されていないとされているのですが、flask_blog/models/entriesでテーブルを作成しております。そのためどこを改善するべきなのかよくわかりません。

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

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: entries [SQL: SELECT entries.id AS entries_id, entries.title AS entries_title, entries.text AS entries_text, entries.created_at AS entries_created_at FROM entries ORDER BY entries.id DESC] (Background on this error at: http://sqlalche.me/e/13/e3q8)

###flask_blog/models/entries.pyのソースコード

python

1from flask_blog import db 2from datetime import datetime 3 4class Entry(db.Model): 5 __tablename__='entries' 6 id = db.Column(db.Integer,primary_key=True) 7 title = db.Column(db.String(50),unique=True) 8 text = db.Column(db.Text) 9 created_at = db.Column(db.DateTime) 10 11 def __init__(self,title=None,text=None): 12 self.title = title 13 self.text= text 14 self.created_at= datetime.utcnow() 15 16 def __repr__(self): 17 return'<Entryid:{} title:{} text:{}>'.format(self.id, self.title, self.text)

###flask_blog/views/entries.pyのソースコード

python

1from flask import request,redirect,url_for,render_template,flash,session 2from flask_blog import app 3from flask_blog import db 4from flask_blog.models.entries import Entry 5 6@app.route('/') 7def show_entries(): 8 if not session.get('logged_in'): 9 return redirect(url_for('login')) 10 entries=Entry.query.order_by(Entry.id.desc()).all() 11 return render_template('entries/index.html',entries=entries) 12 13@app.route('/entries',methods=['POST']) 14def add_entry(): 15 if not session.get('logged_in'): 16 return redirect(url_for('login')) 17 entry=Entry(title=request.form['title'],text=request.form['text']) 18 db.session.add(entry) 19 db.session.commit() 20 flash('新しく記事が作成されました') 21 return redirect(url_for('show_entries')) 22 23@app.route('/entries/new',methods=['GET']) 24def new_entry(): 25 if not session.get('logged_in'): 26 return redirect(url_for('login')) 27 return render_template('entries/new.html')

試したこと

⑴models/entriesのソースコードが間違っていないかの確認
結果特になし
⑵entries=Entry.query.order_by(Entry.id.desc()).all()の削除
ブラウザが表示ざれなくなる

補足情報(FW/ツールのバージョンなど)

ちなみにSQLAlchemyのブラウザ上で以下のコードがハイライトされていたのですがエラーと何か関係があるのでしょうか。

entries=Entry.query.order_by(Entry.id.desc()).all()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

no such table: entriesとあるので、作成したDBにentriesテーブルが無い可能性があります。

参考している書籍があるなら、どの部分なのか記載しましょう。
今回のは電子書籍なのでページ数では分かりませんから、章タイトルとその辺りの文章の引用とかを書くと良いと思います。
また、エラーメッセージの何が分からないのか、どのように調べたのかも記載しましょう。

古いバージョンである事、推奨されているコマンドを利用していないことを指摘されている状態で、コード書き直ししか実行せず、エラーメッセージを載せただけは単なる丸投げ質問です。

投稿2021/07/08 12:49

FiroProchainezo

総合スコア2387

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yanya

2021/07/08 12:54

アドバイスありがとうございます。こう言った質問の形式に不慣れなため非常に参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問