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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

3848閲覧

sqlalchemy DateTime 名前登録時の日時を登録、表示できるようにしたいです!

mmmmmm-.

総合スコア32

Flask

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/05/01 14:46

編集2021/05/10 10:15

python Flaskで簡単なwebアプリをつくっています。

お世話になっている記事(https://creepfablic.site/2019/05/03/flask-sqlite/)

<作っているアプリイメージ↓>
1枚目の画像にある、名前と年齢を入力すると、DBにデータが保存されます。2枚目の画像にあるように、登録した名前と、年齢が表示されるアプリです。
1枚目は、index.html二枚目は、db_info.htmlです。

![イメージ説明]

イメージ説明

<解決したいこと>
名前と年齢のコラムを作ることができましたが、この二つを送信した日時も、表示させてみたいと思いました。二枚目の画像の右の行、登録日時の行に表示させたいと考えています。

run.pyに様々な方法でコードをかいてみたのですが、力不足でできない状態です。

どなたかいいアイディアご教授いただけると幸いです(><)
よろしくお願いいたします。

<ファイルとディレクトリ>
directory/
|-templates/
|--index.html
|--db_info.html
|
|-flask.sqlite
|
|-run.py

<開発環境>
windows10
PyCharm
anaconda
Python
Flask
sqlite
sqlalchemy

run.pyはこんな感じです。

python

1from flask import Flask, render_template, request #Flaskの操作に必要なモジュールをインポート 2from flask_sqlalchemy import SQLAlchemy 3import datetime 4from sqlalchemy import Column, Integer, String, DateTime #DBのテーブルの型をインポート 5 6#Flaskの立ち上げ 7 8app = Flask(__name__) 9app.config['SECRET_KEY'] = 'secret key' 10app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flask.sqlite' # DBへのパス 11 12#SQLAlchemyでデータベース定義 13 14db = SQLAlchemy(app) 15 16#SQLiteのDBテーブル情報 17 18 19class FLASKDB(db.Model): 20 __tablename__ = 'flask_table' 21 ID = db.Column(Integer, primary_key=True) 22 YOURNAME = db.Column(String(32)) 23 AGE = db.Column(Integer) 24 DATE = db.Column(DateTime, default=datetime.datetime.utcnow) 25 26 27 28 29#DBの作成 30 31db.create_all() 32 33#127.0.0.1:5000に遷移したときの処理 34 35@app.route('/') 36def route(): 37 return render_template('index.html') 38 39#127.0.0.1/DBINFO:5000に遷移したときの処理 40 41@app.route('/DBINFO', methods = ['POST', 'GET']) 42def bokinbox(): 43 if request.method == 'POST': 44 yourname = request.form['yourname'] 45 age = request.form['age'] 46 flask = FLASKDB(YOURNAME=yourname, AGE=age) 47 db.session.add(flask) 48 db.session.commit() 49 db.session.close() 50 FLASKDB_infos = db.session.query(FLASKDB.ID, FLASKDB.YOURNAME, FLASKDB.AGE).all() 51 return render_template('db_info.html', FLASKDB_infos=FLASKDB_infos) 52 53#python app立ち上げ 54 55if __name__ == '__main__': 56 app.run(debug=True)

db_info.htmlはこんな感じです。

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>database</title> 6 <!--bootstrapよみこみ--> 7 <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"> 8</head> 9<body class="text-center"> 10<p class="m-5 p-5">送信ありがとう!!</p> 11 <table border="1" width="80%" height="150" class="m-auto"> 12 <tr> 13 <th bgcolor="#80ffff">名前</th> 14 <th bgcolor="#80ffff">年齢</th> 15 <th bgcolor="#80ffff">登録日時</th> 16 </tr> 17 {% for FLASKDB_info in FLASKDB_infos %} 18 <tr> 19 <td>{{FLASKDB_info[1]}}</td> 20 <td>{{FLASKDB_info[2]}}歳</td> 21 <td>{{]}}</td> 22 </tr> 23 {% endfor %} 24 </table> 25 26</body> 27</html>

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

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

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

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

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

FiroProchainezo

2021/05/06 00:30

質問を3回ほど読み返してみましたが、何がしたくてどういう状況で何ができないのかがわかりませんでした。 問題点と改善したい点を教えていただけませんか?
mmmmmm-.

2021/05/10 10:29

メッセージありがとうございます(^^) 確認遅くなり、申し訳ありません。 質問のほう再編集いたしましたので、お時間あれば教えていただけると幸いです。 (一応こちらでも問題点と改善点を簡単に記載させていただきます。) <問題点と改善したい点> 上の写真一枚目にある、名前と年齢を送信。その後二枚目の写真にある、登録日時に、名前と年齢を送信した日時を表示させたいです。run.pyにコードを書くと思うのですが、力不足でできない状態です。
guest

回答1

0

ベストアンサー

追記していただいたので一応回答しますが、この質問はただの丸投げです。
teratailではとても嫌われますので気をつけてください。

mina-.さんのコードで修正が必要な場所は以下です。

python

1# run.py 2# 4行目 3from sqlalchemy import Column, Integer, String, DateTime #DBのテーブルの型をインポート 4 5# 24行目 6 DATE = db.Column(DateTime, default=datetime.datetime.utcnow) 7 8# 45-46行目 9 age = request.form['age'] 10 flask = FLASKDB(YOURNAME=yourname, AGE=age) 11

html

1<!-- db_info.html --> 2<!-- 1行目と2行目の間 --> 3<!DOCTYPE html> 4 5<!-- 21行目 --> 6 <td>{{]}}</td> 7

以下のように変えて下さい。(こちらは全文)

python

1# run.py 2from flask import Flask, render_template, request 3from flask_sqlalchemy import SQLAlchemy 4from sqlalchemy import Column, Integer, String, DATETIME 5 6import datetime 7 8 9app = Flask(__name__) 10app.config['SECRET_KEY'] = 'secret key' 11app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flask.sqlite' 12 13db = SQLAlchemy(app) 14 15 16class FLASKDB(db.Model): 17 __tablename__ = 'flask_table' 18 19 ID = db.Column(Integer, primary_key=True) 20 YOURNAME = db.Column(String(32)) 21 AGE = db.Column(Integer) 22 DATE = db.Column(DATETIME, default=datetime.datetime.utcnow) 23 24 25db.create_all() 26 27 28@app.route('/') 29def rroute(): 30 return render_template('index.html') 31 32 33@app.route('/DBINFO', methods=['POST', 'GET']) 34def bokinbox(): 35 if request.method == 'POST': 36 yourname = request.form['yourname'] 37 age = request.form['age'] 38 now = datetime.datetime.now() 39 flask = FLASKDB(YOURNAME=yourname, AGE=age, DATE=now) 40 db.session.add(flask) 41 db.session.commit() 42 db.session.close() 43 FLASKDB_infos = db.session.query(FLASKDB.ID, FLASKDB.YOURNAME, FLASKDB.AGE, FLASKDB.DATE).all() 44 return render_template('db_info.html', FLASKDB_infos=FLASKDB_infos) 45 46 47if __name__ == '__main__': 48 app.run()

html

1<!-- db_info.html --> 2<!DOCTYPE html> 3 <head> 4 <meta charset="utf-8"> 5 <title>DB情報</title> 6 </head> 7 <body> 8 <p>送信ありがとう</p> 9 <table border="1" width="80%" height="150"> 10 <tr> 11 <th bgcolor="#80ffff">名前</th> 12 <th bgcolor="#80ffff">年齢</th> 13 <th bgcolor="#80ffff">登録日時</th> 14 </tr> 15 {% for FLASKDB_info in FLASKDB_infos %} 16 <tr> 17 <td>{{FLASKDB_info[1]}}</td> 18 <td>{{FLASKDB_info[2]}}歳</td> 19 <td>{{FLASKDB_info[3]}}</td> 20 </tr> 21 {% endfor %} 22 </table> 23 </body> 24</html>

run.py
4行目:
sqlalchemyの型はDateTimeではなくDATETIMEのようなので変えて下さい。

24行目:
4行目と同じ

45行目-46行目:
新しく追加したDATEを扱っているところがないので追加してください。
なお、わざわざ2行で書きましたが、datetime.datetime.now()DATE=に書いてしまってもよいと思います。

db_info.html
1行目-2行目:
mina-.さんは悪くありませんが、htmlの開始タグ(<html>)が不足しています。

21行目:
表示部分が記載されていないので、書いて下さい。

適当にdatetime.datetime.now()を入れましたが、utcが使いたかったり他のが入れたかったりしたらそれに変更してください。

db_info.htmlの表示部分は[1][2][3]だと項目が増えた時に分かりにくくなると思いますので、以下のようにも書けます。

html

1<!-- db_info.htmlの例 --> 2<!-- 例1 --> 3 {% for n in range(0, FLASKDB_infos|length) %} 4 {{ FLASKDB_infos[n]['ID'] }} 5 {{ FLASKDB_infos[n]['YOURNAME'] }} 6 {{ FLASKDB_infos[n]['AGE'] }} 7 {{ FLASKDB_infos[n]['DATE'] }} 8 <br> 9 {% endfor %} 10 11<!-- 例2 --> 12 {% for n in FLASKDB_infos %} 13 {{ n['ID'] }} 14 {{ n['YOURNAME'] }} 15 {{ n['AGE'] }} 16 {{ n['DATE'] }} 17 <br> 18 {% endfor %}

投稿2021/05/12 01:24

FiroProchainezo

総合スコア2401

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

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

mmmmmm-.

2021/05/18 15:09

ご丁寧にご教授くださり、本当にありがとうございます! 試してみたところ、登録日時を反映することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問