回答編集履歴
13
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
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
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
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
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
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
修正
test
CHANGED
@@ -15,4 +15,3 @@
|
|
15
15
|
if __name__ == '__main__':
|
16
16
|
app.run(debug=True)
|
17
17
|
```
|
18
|
-
|
6
修正
test
CHANGED
@@ -1,39 +1,17 @@
|
|
1
1
|
エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
|
2
|
-
(たぶんどこかで 断片的なコードでpostテーブルを作成する処理を実行していて、質問者さんはその処理を飛ばしているのではないでしょうか。でなければ動画作成者が何もせずに正常に動くと勘違いしているかのどちらかです。)
|
3
2
|
|
4
|
-
|
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
|
-
|
5
|
+
「初回読み込み時に post という名前のテーブルを作成する」には
|
11
|
-
f
|
6
|
+
`if __name__ == '__main__':`の前に、以下の3行追加してください
|
12
7
|
|
8
|
+
```
|
9
|
+
# ---以下の3行を追加--- #
|
13
|
-
app
|
10
|
+
@app.before_first_request
|
14
|
-
|
11
|
+
def init():
|
15
|
-
db
|
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
|
-
#
|
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
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
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
check_table() #--- 追加 ---#
|
29
29
|
return render_template('create.html')
|
30
30
|
|
31
|
-
|
31
|
+
# ---以下3行追加--- #
|
32
32
|
def check_table():
|
33
33
|
if not inspect(db.engine).has_table("post"):
|
34
34
|
db.create_all()
|
3
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
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
|
-
|
16
|
+
class Post(db.Model):
|
19
|
-
|
17
|
+
....略.....
|
20
18
|
|
19
|
+
@app.route('/', methods=['GET', 'POST']) #トップページ
|
21
|
-
|
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
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
エラー
|
1
|
+
エラー内容の通り、データベースに「post」というテーブルが存在していないにもかかわらず post というテーブルを読み込もうとしたため、そのようなエラーになっています。
|
2
2
|
|
3
|
-
下記のように、post というテーブルが存在するか調べ、存在ない場合は
|
3
|
+
下記のように、「post という名前のテーブルが存在するか調べ、存在しない場合は作成する」という方法があります。
|
4
4
|
(追加した部分:コメント)
|
5
5
|
```python
|
6
6
|
from datetime import datetime
|