#実現したいこと
・Flask及びpsycopg2にてfetchallを利用した際、取得したデータの型を知りたい
#現状
下記のソースコードを元にpython,Flask,PostgreSQLについて学習しております。
その過程で、なぜそのコードで希望した出力がなされるのか、がわからなくなってしまったため、質問させていただけますと幸いです。
#ソースコード及び不明点
python
1#モジュールのインポート 2from flask import Flask, render_template, request 3import psycopg2 4import psycopg2.extras 5 6#インスタンス化 7app = Flask(__name__) 8 9#コネクションの作成 10conn = psycopg2.connect(""" 11 user=flasklearner 12 dbname=flasknote 13""") 14 15#カーソルの作成 16cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 17 18#ルーティング 19@app.route('/', methods=['GET']) 20def index(): 21 cur.execute('SELECT * FROM messages') 22 messages = cur.fetchall() 23 messages = [ dict(message) for message in messages ] 24 return render_template('index.html', messages=messages)
html
1<!doctype html> 2<html> 3 <head> 4 <meta charset="utf-8"/> 5 </head> 6 <body> 7 <div> 8 {% for msg in messages %} 9 <h2>{{msg.username}}</h2> 10 <p>{{msg.message}}</p> 11 {% endfor %} 12 </div> 13 </body> 14</html>
SQL
1CREATE TABLE messages ( 2 username varchar(64), 3 message varchar(140) 4); 5
※上記のコードからは消していますが、データはフォームから入力されたものをINSERT INTOでレコード作成しています。
不明点としてはcur.fetchall()で取得したデータ型が何であるか、といった内容になります。
自分の現状の認識は、
python
1cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
の部分にて、カーソル作成時に通常配列形式で取得される情報を辞書型で返されるように指定し、
python
1cur.execute('SELECT * FROM messages') 2messages = cur.fetchall()
にてテーブルに存在する全てのレコードを取得、そしてそれをmessagesに格納している、と思っています。
【不明点1】ここでmessagesには下記のような各レコードごとの辞書データのリストが入っているのでしょうか?
[{"username":"入力した値1", "message":"入力した値1"}, {"username":"入力した値2", "message":"入力した値2"}, ... , {"username":"入力した値N", "message":"入力した値N"}]
【不明点2】またその後の下記部分では何を行い、最終的にindex.html側でmsg.usernameとして中身が取り出せるのか、もわかっておりません。。。
Python
1messages = [ dict(message) for message in messages ]
初歩的な質問で恐縮ですが、お力添えいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 11:14
2021/01/16 11:22
2021/01/16 11:44