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

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

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

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

データベース

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

Python

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

Q&A

1回答

428閲覧

Pythonにて関数の引数としてデータベースのカラム名を指定し、その引数を使いデータベース内のデータを受け取りたい

tayler

総合スコア0

SQLite

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

データベース

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

Python

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

0グッド

0クリップ

投稿2022/05/28 03:15

編集2022/05/28 10:48

私はオブジェクト指向でのアプリケーション作成をPythonを用いて行っている者です。

現在、引数にてデータベースのカラムを選択し、そのカラムのデータを用いた計算をしたいと考えております。

例えば、

データベース
Data

カラム名キー
idint主キー
sizefloat
created_atdate

Python

1# コード 2def calc_sum(model, column_name): 3 x = [] 4 x.append(model.column_name) 5 print(sum(x)) 6 7calc_sum(Data, size)

上記のコードを実行した際に、Dataモデル内のsizeカラムの全データの総和が得られるように質と考えています。

ですが、上記のコードをそのまま実行した場合、
NameError: name 'estimate_proxy_size' is not defined
ga
表示されます。
そこで、

Python

1# コード 2def calc_sum(model, column_name): 3 x = [] 4 x.append(model.column_name) 5 print(sum(x)) 6 7calc_sum(Data, "size") # 修正箇所

上記のように修正した場合は、
AttributeError: 'Data' object has no attribute 'column_name'
が表示されます。

データベースはSQLiteを用いております。

どのようにコードを変更すれば自分のやりたいことが実現できるのでしょうか?
また、自分のやりたい引数にカラム名を指定するということはできないのでしょうか?
ご回答よろしくお願いします。

追記
実際に実行したいコードを添付しておきます。

views.py

1from flask import ( 2 Blueprint, 3 render_template, 4 request, 5 redirect, 6 url_for, 7 send_from_directory, 8 current_app, 9 make_response, 10 jsonify 11) 12from math import sqrt 13import uuid 14from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm 15from pathlib import Path 16from apps.calc.models import Data 17from apps.app import db 18import pandas as pd 19import os 20import matplotlib.pyplot as plt 21from apps.calc.classes.input import Input 22from apps.calc.classes.control_database import ControlDatabase 23from apps.calc.classes.calculate2 import Calclate 24 25 26calc = Blueprint( 27 "calc", 28 __name__, 29 template_folder="templates", 30 static_folder="static", 31) 32 33avg_esp, avg_dh = 0, 0 34sd_esp, sd_dh = 0, 0 35sd_2 = 0 36r, csd = 0, 0 37 38 39control_database = ControlDatabase(Data) 40 41@calc.route('/result', methods=["GET", "POST"]) 42def calc_result(): 43 global sum_result, avg_eps, avg_dh, sd_eps, sd_dh, r 44 45 database_datas = control_database.get_alldata() 46 calculate_eps = Calclate(database_datas, estimate_proxy_size) 47 calculate_dh = Calclate(database_datas, development_hours) 48 49 # 平均の計算 50 avg_eps = calculate_eps.calc_avg() 51 avg_dh = calculate_dh.calc_avg() 52 53 # 標準偏差の計算 54 sd_eps = calculate_eps.calc_sd() 55 sd_dh = calculate_dh.calc_sd() 56 57 58 return render_template("calc/result.html", avg1=avg_eps, avg2=avg_dh, sd1=sd_eps, sd2=sd_dh)

caluclate.py

1from flask import ( 2 Blueprint, 3 render_template, 4 request, 5 redirect, 6 url_for, 7 send_from_directory, 8 current_app, 9 make_response, 10 jsonify 11) 12from math import sqrt 13import uuid 14from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm 15from pathlib import Path 16from apps.calc.models import Data 17from apps.app import db 18import pandas as pd 19import os 20import matplotlib.pyplot as plt 21from apps.calc.classes.input import Input 22from apps.calc.classes.control_database import ControlDatabase 23 24 25class Calclate: 26 27 def __init__(self, datas, column_name): 28 29 self.datas = datas 30 self.column_name = column_name 31 32 def retrun_datalist(self): 33 data_list = [] 34 column_name = self.column_name 35 for data in self.datas: 36 data_list.append(data.column_name) 37 38 return data_list 39 40 def select_data_column(self): 41 pass 42 43 # 総和の計算 44 def calc_sum(self): 45 data_list = self.retrun_datalist() 46 sum_result = sum(data_list) 47 48 return sum_result 49 50 # 平均の計算 51 def calc_avg(self): 52 data_list = self.retrun_datalist() 53 try: 54 avg = self.calc_sum() / len(data_list) 55 56 except ZeroDivisionError: 57 avg = None 58 59 return avg 60 # 標準偏差の計算 61 def calc_sd(self): 62 source_sd = [] 63 data_list = self.retrun_datalist() 64 avg = self.calc_avg() 65 if avg == None: 66 try: 67 for i in range(len(data_list)): 68 source_sd.append((data_list[i] - avg) ** 2) 69 70 sd_2 = sum(source_sd) / len(source_sd) 71 sd = round(sqrt(sd_2), 2) 72 73 except ZeroDivisionError: 74 sd = None 75 76 return sd

models.py

1from datetime import datetime 2 3from apps.app import db 4from werkzeug.security import generate_password_hash 5 6 7class Data(db.Model): 8 __tablename__ = "datas" 9 id = db.Column(db.Integer, primary_key=True) 10 estimate_proxy_size = db.Column(db.Float) 11 development_hours = db.Column(db.Float) 12 created_at = db.Column(db.DateTime, default=datetime.now)

このコードで、Dataモデルのestimate_proxy_sizeやdevelopment_hoursの値の計算をしたいと考えています。

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

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

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

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

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

can110

2022/05/28 03:51 編集

Dataがどんなものがが分かりません。 コードは断片ではなく実際に動作する(現象が再現する)完全なコードを提示ください。
guest

回答1

0

質問されているものと同内容ですが、「model.column_name」は何を返していますか?
また、xにappendすることで、xがどのようなものになると思っていますか。

そのあたりが間違えているので、正しい結果が得られないので、まずはその部分を確認して必要な修正を加えればいいと思います。

投稿2022/05/28 09:09

TakaiY

総合スコア12779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問