回答編集履歴

13

 

2022/11/26 23:35

投稿

退会済みユーザー
test CHANGED
@@ -1,7 +1,7 @@
1
1
  エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
2
2
 
3
3
  コメントで質問者さんは db.create_all() を行ったということですが、その処理でエラーが出て正常にtodo.dbが生成できていない可能性があります。
4
-
4
+ (動画で使用しているライブラリのバージョンは古い可能性が高いです)
5
5
  「初回読み込み時に post という名前のテーブルが存在しないか調べて、存在しない場合には自動的に作成する」には
6
6
  app.py の `if __name__ == '__main__':`の前に、以下の3行追加してください
7
7
 

12

 

2022/11/26 23:27

投稿

退会済みユーザー
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  ```
16
16
 
17
- 追加後の app.py 全体のコード(変な追加のされ方をして動かないと言われないように、念のため)
17
+ 追加後の app.py 全体のコード(念のため)
18
18
  ```python
19
19
  from datetime import datetime
20
20
 

11

 

2022/11/26 23:26

投稿

退会済みユーザー
test CHANGED
@@ -13,3 +13,53 @@
13
13
  db.create_all()
14
14
 
15
15
  ```
16
+
17
+ 追加後の app.py 全体のコード(変な追加のされ方をして動かないと言われないように、念のため)
18
+ ```python
19
+ from datetime import datetime
20
+
21
+ from flask import Flask, render_template, request, redirect
22
+ from flask_sqlalchemy import SQLAlchemy
23
+
24
+ app = Flask(__name__)
25
+ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
26
+ db = SQLAlchemy(app)
27
+
28
+
29
+ class Post(db.Model):
30
+ id = db.Column(db.Integer, primary_key=True)
31
+ title = db.Column(db.String(30), nullable=False) #30字以内のタイトル
32
+ detail = db.Column(db.String(100)) #100字以内の詳細
33
+ due = db.Column(db.DateTime, nullable=False) #期限
34
+
35
+ @app.route('/', methods=['GET', 'POST']) #トップページ
36
+ def index():
37
+ if request.method == 'GET':
38
+ posts = Post.query.all() #投稿すべてを取り出してくる
39
+ return render_template('index.html', posts=posts)
40
+ else:
41
+ title = request.form.get('title') #formから送られてきた内容を受け取る
42
+ detail = request.form.get('detail')
43
+ due = request.form.get('due')
44
+
45
+ due = datetime.strptime(due, '%Y-%m-%d') #ハイフンつなぎの日付に変更
46
+ new_post = Post(title=title, detail=detail, due=due)
47
+
48
+ db.session.add(new_post) #データベースにデータを保存
49
+ db.session.commit()
50
+
51
+ return redirect('/')
52
+
53
+
54
+ @app.route('/create') #タスクを作成するページ
55
+ def create():
56
+ return render_template('create.html')
57
+
58
+ # ---追加--- #
59
+ @app.before_first_request
60
+ def init():
61
+ db.create_all()
62
+
63
+ if __name__ == '__main__':
64
+ app.run(debug=True)
65
+ ```

10

 

2022/11/26 23:24

投稿

退会済みユーザー
test CHANGED
@@ -7,12 +7,9 @@
7
7
 
8
8
  app.py
9
9
  ```
10
- # ---以下の3行を追加--- #
10
+ # ---if __name__ == '__main__': の直前に、以下の3行を追加--- #
11
11
  @app.before_first_request
12
12
  def init():
13
13
  db.create_all()
14
14
 
15
- # 以降はそのままでよい
16
- if __name__ == '__main__':
17
- app.run(debug=True)
18
15
  ```

9

 

2022/11/26 23:23

投稿

退会済みユーザー
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  コメントで質問者さんは db.create_all() を行ったということですが、その処理でエラーが出て正常にtodo.dbが生成できていない可能性があります。
4
4
 
5
- 「初回読み込み時に post という名前のテーブル作成する」には
5
+ 「初回読み込み時に post という名前のテーブルが存在しないか調べて、存在しない場合には自動的に作成する」には
6
6
  app.py の `if __name__ == '__main__':`の前に、以下の3行追加してください
7
7
 
8
8
  app.py

8

 

2022/11/26 23:19

投稿

退会済みユーザー
test CHANGED
@@ -3,8 +3,9 @@
3
3
  コメントで質問者さんは db.create_all() を行ったということですが、その処理でエラーが出て正常にtodo.dbが生成できていない可能性があります。
4
4
 
5
5
  「初回読み込み時に post という名前のテーブルを作成する」には
6
- `if __name__ == '__main__':`の前に、以下の3行追加してください
6
+ app.py の `if __name__ == '__main__':`の前に、以下の3行追加してください
7
7
 
8
+ app.py
8
9
  ```
9
10
  # ---以下の3行を追加--- #
10
11
  @app.before_first_request

7

修正

2022/11/26 23:12

投稿

退会済みユーザー
test CHANGED
@@ -15,4 +15,3 @@
15
15
  if __name__ == '__main__':
16
16
  app.run(debug=True)
17
17
  ```
18
-

6

修正

2022/11/26 23:12

投稿

退会済みユーザー
test CHANGED
@@ -1,39 +1,17 @@
1
1
  エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
2
- (たぶんどこかで 断片的なコードでpostテーブルを作成する処理を実行していて、質問者さんはその処理を飛ばしているのではないでしょうか。でなければ動画作成者が何もせずに正常に動くと勘違いしているかのどちらかです。)
3
2
 
4
- いずれにせよ、正常に動かしたいならば、下記のように、「post という名前ブル存在するか調べ、存在しない場合は作成する」という方法は一応あります。
3
+ コメントで質問者さんは db.create_all() を行ったということですが、そ処理でエラーが出て正常にtodo.dbが生成できていない可能性があります。
5
- (追加した部分:コメント)
6
- ```python
7
- from datetime import datetime
8
4
 
9
- from flask import Flask, render_template, request, redirect
10
- from flask_sqlalchemy import SQLAlchemy
5
+ 「初回読み込み時に post という名前のテーブルを作成する」には
11
- from flask_sqlalchemy import inspect #--- 追加 ---#
6
+ `if __name__ == '__main__':`の前に、以下の3行追加してください
12
7
 
8
+ ```
9
+ # ---以下の3行を追加--- #
13
- app = Flask(__name__)
10
+ @app.before_first_request
14
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
11
+ def init():
15
- db = SQLAlchemy(app)
12
+ db.create_all()
16
13
 
17
- class Post(db.Model):
18
- ....略.....
19
-
20
- @app.route('/', methods=['GET', 'POST'])
21
- def index():
22
- check_table() #--- 追加 ---#
23
- if request.method == 'GET':
24
- ...以下略
25
- ..
26
-
27
- @app.route('/create')
28
- def create():
29
- check_table() #--- 追加 ---#
30
- return render_template('create.html')
31
-
32
- # ---下3行追加--- #
14
+ # 以降はそのままでよい
33
- def check_table():
34
- if not inspect(db.engine).has_table("post"):
35
- db.create_all()
36
-
37
15
  if __name__ == '__main__':
38
16
  app.run(debug=True)
39
17
  ```

5

 

2022/11/26 11:06

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,7 @@
1
1
  エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
2
+ (たぶんどこかで 断片的なコードでpostテーブルを作成する処理を実行していて、質問者さんはその処理を飛ばしているのではないでしょうか。でなければ動画作成者が何もせずに正常に動くと勘違いしているかのどちらかです。)
2
3
 
3
- 下記のように、「post という名前のテーブルが存在するか調べ、存在しない場合は作成する」という方法あります。
4
+ いずれにせよ、正常に動かしたいならば、下記のように、「post という名前のテーブルが存在するか調べ、存在しない場合は作成する」という方法は一応あります。
4
5
  (追加した部分:コメント)
5
6
  ```python
6
7
  from datetime import datetime
@@ -36,3 +37,4 @@
36
37
  if __name__ == '__main__':
37
38
  app.run(debug=True)
38
39
  ```
40
+

4

 

2022/11/26 11:01

投稿

退会済みユーザー
test CHANGED
@@ -28,7 +28,7 @@
28
28
  check_table() #--- 追加 ---#
29
29
  return render_template('create.html')
30
30
 
31
- # ---以下3行追加--- #
31
+ # ---以下3行追加--- #
32
32
  def check_table():
33
33
  if not inspect(db.engine).has_table("post"):
34
34
  db.create_all()

3

 

2022/11/26 11:01

投稿

退会済みユーザー
test CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  from flask import Flask, render_template, request, redirect
9
9
  from flask_sqlalchemy import SQLAlchemy
10
- from flask_sqlalchemy import inspect #--------------- 追加------------------#
10
+ from flask_sqlalchemy import inspect #--- 追加 ---#
11
11
 
12
12
  app = Flask(__name__)
13
13
  app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
@@ -16,21 +16,22 @@
16
16
  class Post(db.Model):
17
17
  ....略.....
18
18
 
19
- @app.route('/', methods=['GET', 'POST']) #トップページ
19
+ @app.route('/', methods=['GET', 'POST'])
20
20
  def index():
21
- check_table() #----------追加------------#
21
+ check_table() #--- 追加 ---#
22
22
  if request.method == 'GET':
23
23
  ...以下略
24
24
  ..
25
25
 
26
26
  @app.route('/create')
27
27
  def create():
28
- check_table() #----------追加------------#
28
+ check_table() #--- 追加 ---#
29
29
  return render_template('create.html')
30
30
 
31
+ # ---以下3行追加--- #
31
- def check_table(): #----------追加------------#
32
+ def check_table():
32
- if not inspect(db.engine).has_table("post"): #----------追加------------#
33
+ if not inspect(db.engine).has_table("post"):
33
- db.create_all() #----------追加------------#
34
+ db.create_all()
34
35
 
35
36
  if __name__ == '__main__':
36
37
  app.run(debug=True)

2

 

2022/11/26 10:59

投稿

退会済みユーザー
test CHANGED
@@ -13,12 +13,25 @@
13
13
  app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
14
14
  db = SQLAlchemy(app)
15
15
 
16
- # -------------以下2行追加-------
17
- if not inspect(db.engine).has_table("post"):
18
- db.create_all()
16
+ class Post(db.Model):
19
- #--------------追加ここまで-------
17
+ ....略.....
20
18
 
19
+ @app.route('/', methods=['GET', 'POST']) #トップページ
21
- class Post(db.Model):
20
+ def index():
21
+ check_table() #----------追加------------#
22
+ if request.method == 'GET':
22
- .....以下略.....
23
+ ...以下略
24
+ ..
25
+
26
+ @app.route('/create')
27
+ def create():
28
+ check_table() #----------追加------------#
29
+ return render_template('create.html')
23
30
 
31
+ def check_table(): #----------追加------------#
32
+ if not inspect(db.engine).has_table("post"): #----------追加------------#
33
+ db.create_all() #----------追加------------#
34
+
35
+ if __name__ == '__main__':
36
+ app.run(debug=True)
24
37
  ```

1

 

2022/11/26 10:53

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,6 @@
1
- エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
1
+ エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
2
2
 
3
- 下記のように、post というテーブルが存在するか調べ、存在ない場合は、post テーブルを作成するという方法があります。
3
+ 下記のように、post という名前のテーブルが存在するか調べ、存在ない場合は作成するという方法があります。
4
4
  (追加した部分:コメント)
5
5
  ```python
6
6
  from datetime import datetime