flaskでwebアプリを作りたいのですが、どなたか教えて頂けないでしょうか?

実現したいこと

入力欄にタイトル、内容、投稿日とあるのですが、それらを入力して、キチンとデータベース(sqlite)に入力されるようにしたいのです。

発生している問題・分からないこと

入力欄にタイトル、内容、投稿日とあるのですが、タイトル、内容までは入力完了して、キチンとデータも更新されるのですが、投稿日を追加したく、コードを書いたのですが、タイトル、内容、投稿日を入力しても作成・更新ボタンを押すとstatement errorが出ます。投稿日を入力し、作成ボタン・更新ボタンを押せば、レコードが更新されるようにしたいのです。私、初心者でして、提示すべき情報も出し切れていなかったり、いろいろ無理なお願いをしているかもしれませんが何とか教えて頂けないでしょうか?
よろしくお願い致します。

Eggpan様
エラーメッセージの一番上の部分でよろしいでしょうか?
StatementError
sqlalchemy.exc.StatementError: (builtins.TypeError) SQLite Date type only accepts Python date objects as input.
[SQL: INSERT INTO memos (title, content, create_at) VALUES (?, ?, ?)]
[parameters: [{'content': 'gwr', 'create_at': '2024-02-06', 'title': 'gw'}]]

該当のソースコード

python

1app.py 2from flask import Flask 3from flask_migrate import Migrate 4from models import db 5 6# ==================================================7# Flask8# ==================================================9app = Flask(__name__)10# 設定ファイル読み込み11app.config.from_object("config.Config")12# dbとFlaskとの紐づけ13db.init_app(app)14# マイグレーションとの紐づけ(Flaskとdb)15migrate = Migrate(app, db)16# viewsのインポート17from views import *18 19# ==================================================20# 実行21# ==================================================22if __name__ == "__main__":23 app.run()24 25config.py 26# ==================================================27# 設定28# ==================================================29class Config(object):30 # デバッグモード31 DEBUG=True32 # 警告対策33 SQLALCHEMY_TRACK_MODIFICATIONS = False34 # DB設定35 SQLALCHEMY_DATABASE_URI = "sqlite:///memodb.sqlite"36

models.py

1from datetime import date 2from flask_sqlalchemy import SQLAlchemy 3 4# Flask-SQLAlchemyの生成 5db = SQLAlchemy() 6 7# ================================================== 8# モデル 9# ================================================== 10# メモ 11class Memo(db.Model): 12 "テスト用のモジュールです" 13 # テーブル名 14 __tablename__ = 'memos' 15 # ID(PK) 16 id = db.Column(db.Integer, primary_key=True, autoincrement=True) 17 # タイトル(NULL許可しない) 18 title = db.Column(db.String(50), nullable=False) 19 # 内容 20 content = db.Column(db.Text) 21 #投稿日 22 create_at = db.Column(db.Date)

views.py

1from flask import render_template, request, redirect, url_for 2from app import app 3from models import db, Memo 4 5# ================================================== 6# ルーティング 7# ================================================== 8# 一覧 9@app.route("/memo/") 10def index(): 11 # メモ全件取得 12 memos = Memo.query.all() 13 # 画面遷移 14 return render_template("index.html", memos=memos) 15 16# 登録 17@app.route("/memo/create", methods=["GET", "POST"]) 18def create(): 19 # POST時 20 if request.method == "POST": 21 # データ入力取得 22 title = request.form["title"] 23 content = request.form["content"] 24 create_at = request.form["create_at"] 25 # 登録処理 26 memo = Memo(title=title, content=content, create_at=create_at) 27 db.session.add(memo) 28 db.session.commit() 29 # 画面遷移 30 return redirect(url_for("index")) 31 # GET時 32 # 画面遷移 33 return render_template("create.html") 34 35# 更新 36@app.route("/memo/update/<int:memo_id>", methods=["GET", "POST"]) 37def update(memo_id): 38 "テスト用のモジュールです" 39 # データベースからmemo_idに一致するメモを取得し、 40 # 見つからない場合は404エラーを表示 41 memo = Memo.query.get_or_404(memo_id) 42 # POST時 43 if request.method == "POST": 44 # 変更処理 45 memo.title = request.form["title"] 46 memo.content = request.form["content"] 47 memo.create_at = request.form["create_at"] 48 db.session.commit() 49 # 画面遷移 50 return redirect(url_for("index")) 51 # GET時 52 # 画面遷移 53 return render_template("update.html", memo=memo) 54 55# 削除 56@app.route("/memo/delete/<int:memo_id>") 57def delete(memo_id): 58 "テスト用のモジュールです" 59 # データベースからmemo_idに一致するメモを取得し、 60 # 見つからない場合は404エラーを表示 61 memo = Memo.query.get_or_404(memo_id) 62 # 削除処理 63 db.session.delete(memo) 64 db.session.commit() 65 # 画面遷移 66 return redirect(url_for("index")) 67 68# モジュールのインポート 69from werkzeug.exceptions import NotFound 70 71# エラーハンドリング 72@app.errorhandler(NotFound) 73def show_404_page(error): 74 "テスト用のモジュールです" 75 msg = error.description 76 print('エラー内容:',msg) 77 return render_template('errors/404.html', msg=msg) , 404

base.html・index.html

1base.html 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5 <meta charset="UTF-8"> 6 <title>検査・試験依頼入力フォーム</title> 7</head> 8<body> 9 {% block content %}{% endblock %} 10</body> 11</html> 12index.html 13{% extends "base.html" %} 14 15{% block content %} 16 <h1>メモ一覧</h1> 17 <ul> 18 {% for memo in memos %} 19 <li>{{ memo.title }} - 20 <a href="{{ url_for('update', memo_id=memo.id) }}">編集</a> | 21 <a href="{{ url_for('delete', memo_id=memo.id) }}">削除</a> 22 </li> 23 {% endfor %} 24 </ul> 25 26 <a href="{{ url_for('create') }}">新しいメモを作成</a> 27{% endblock %} 28 29

create.html・update.html

1create.html 2{% extends "base.html" %} 3 4{% block content %} 5 <h1>新しいメモを作成</h1> 6 <form method="post" action="{{ url_for('create') }}"> 7 <label for="title">タイトル</label> 8 <input type="text" name="title" id="title" required> 9 <br><br> 10 <label for="content">内容</label> 11 <textarea name="content" id="content" cols="50" rows="5" required></textarea> 12 <br><br> 13 <label for="create_at">投稿日</label> 14 <input type="date" id="create_at" name="create_at" value=""> 15 <br><br> 16 <input type="submit" value="作成"> 17 </form> 18 19 <a href="{{ url_for('index') }}">戻る</a> 20{% endblock %} 21update.html 22{% extends "base.html" %} 23 24{% block content %} 25 <h1>メモを編集</h1> 26 <form method="post" action="{{ url_for('update', memo_id=memo.id) }}"> 27 <label for="title">タイトル</label> 28 <input type="text" name="title" id="title" value="{{ memo.title }}" required> 29 <br><br> 30 <label for="content">内容</label> 31 <textarea name="content" id="content" cols="50" rows="5" required>{{ memo.content }}</textarea> 32 <br><br> 33 <label for="create_at">投稿日</label> 34 <input type="date" id="create_at" name="create_at" value=""> 35 <br><br> 36 <input type="submit" value="更新"> 37 </form> 38 39 <a href="{{ url_for('index') }}">戻る</a> 40{% endblock %} 41 42

試したこと・調べたこと

上記の詳細・結果

<ファイルとディレクトリ>
ファイル名
┣ templates ━ errors ━ 404.html
┃ ┣ base.html
┃ ┣ create.html
┃ ┣ index.html
┃ ┗ update.html
┣app.py
┣config.py
┣models.py
┗ views.py

補足

<開発環境>
windows11、Python、Flask、sqlite、sqlalchemy
まだ、python flask sqlite sqlalchemyの初級者なのでいろいろなことが分かっていません。
何とか覚えたいと考えております。皆様、ご教授願えないでしょうか?
よろしくお願い致します。

コメントを投稿

0 コメント