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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1117閲覧

sqlalchemyを使った演算結果をtemplateに表示したい

tomoysh

総合スコア42

SQLite

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2022/08/15 08:37

編集2023/01/29 22:29

SQLでのカラムごとに計算した結果を、templateに表示したいのですが、思い通りに行きません。
実現したいことは、Post classのreturn_を合計した値をtemplateに表示することです。
def index の中で t_return = sum(db.session.query(Post.return_).all())のように試みましたが、t_returnがintでなくstrと認識されており、確認するとt_returnが[(200,), (500,), (400,)]となっておりました。試行錯誤しましたが、解決できなかったのでアドバイスをいただければと思います。

python

1from flask import Flask, render_template,request, redirect 2from flask_sqlalchemy import SQLAlchemy 3import datetime 4from flask_bootstrap import Bootstrap 5 6 7app = Flask(__name__) 8app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db' 9db = SQLAlchemy(app) 10bootstrap = Bootstrap(app) 11 12class Post(db.Model): 13 id = db.Column(db.Integer, primary_key=True) 14 date = db.Column(db.Date, nullable=False, 15 default=datetime.date.today()) 16 kinds = db.Column(db.String(10), nullable=False) 17 invest = db.Column(db.Integer, nullable=False) 18 return_ = db.Column(db.Integer, unique=False) 19 20 21@app.route("/", methods=['GET','POST']) 22def index(): 23 if request.method =='GET': 24 posts = Post.query.all() 25 t_return = db.session.query(Post.return_).all() 26 return render_template('index.html', posts=posts, t_return=t_return) 27 28@app.route("/create", methods=['GET','POST']) 29def create(): 30 if request.method == 'POST': 31 title = request.form.get('title') 32 invest = request.form.get('invest') 33 return_ = request.form.get('return') 34 post = Post(kinds=title, invest=invest, return_=return_) 35 db.session.add(post) 36 db.session.commit() 37 return redirect('/') 38 else: 39 return render_template('create.html')

index.html

1{% extends 'bootstrap/base.html' %} 2{% block title %}タイトル 3{% endblock %} 4{% block content %} 5<div class="container"> 6 <h2>累計</h2> 7 {{ t_return }} 8 <table class="table"> 9 <thead> 10 <tr> 11 <th scope="col">No</th> 12 <th scope="col">Date</th> 13 <th scope="col">Kinds</th> 14 <th scope="col">Invest</th> 15 <th scope="col">Return</th> 16 </tr> 17 </thead> 18 {% for post in posts %} 19 <tbody> 20 <tr> 21 <th scope="row">{{ post.id }}</th> 22 <td>{{ post.date }}</td> 23 <td>{{ post.kinds }}</td> 24 <td>¥{{ post.invest }}</td> 25 <td>¥{{ post.return_ }}</td> 26 27 </tr> 28 </tbody> 29 {% endfor %} 30 {% endblock %} 31
lamuu_chemist👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/08/15 23:41 編集

試されたtemplateのファイル(index.html)の内容とその表示結果も記載してください。
guest

回答1

0

index() 関数を下記のように修正した場合はいかがでしょうか。

py

1@app.route("/", methods=['GET','POST']) 2def index(): 3 if request.method =='GET': 4 posts = Post.query.all() 5 t_return = 0 6 returns = db.session.query(Post.return_).all() 7 for r in returns: 8 s = r[0] 9 if s == '': s = 0 10 t_return += int(s) 11 return render_template('index.html', posts=posts, t_return=t_return)

sum関数とジェネレータ式を用いると下記のように短くすることもできます。

py

1@app.route("/", methods=['GET','POST']) 2def index(): 3 if request.method =='GET': 4 posts = Post.query.all() 5 returns = db.session.query(Post.return_).all() 6 t_return = sum(int(r[0] or 0) for r in returns) 7 return render_template('index.html', posts=posts, t_return=t_return)

投稿2022/08/16 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lamuu_chemist

2023/01/29 12:45

質問主ではないですが同じようなコードの作成で悩んでいました。 sum関数、ジェネレータ式の方法でうまく動作しました! ありがとうございます!
退会済みユーザー

退会済みユーザー

2023/01/29 13:29

コメントありがとうございます。お役に立ててよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問