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

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

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

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

オブジェクト指向

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

データベース

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

Python

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

受付中

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

tayler
tayler

総合スコア0

SQLite

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

オブジェクト指向

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

データベース

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

Python

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

1回答

0評価

0クリップ

115閲覧

投稿2022/05/28 03:15

編集2022/05/28 10:48

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

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

例えば、

データベース
Data

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

Python

# コード def calc_sum(model, column_name): x = [] x.append(model.column_name) print(sum(x)) calc_sum(Data, size)

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

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

Python

# コード def calc_sum(model, column_name): x = [] x.append(model.column_name) print(sum(x)) calc_sum(Data, "size") # 修正箇所

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

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

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

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

views.py

from flask import ( Blueprint, render_template, request, redirect, url_for, send_from_directory, current_app, make_response, jsonify ) from math import sqrt import uuid from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm from pathlib import Path from apps.calc.models import Data from apps.app import db import pandas as pd import os import matplotlib.pyplot as plt from apps.calc.classes.input import Input from apps.calc.classes.control_database import ControlDatabase from apps.calc.classes.calculate2 import Calclate calc = Blueprint( "calc", __name__, template_folder="templates", static_folder="static", ) avg_esp, avg_dh = 0, 0 sd_esp, sd_dh = 0, 0 sd_2 = 0 r, csd = 0, 0 control_database = ControlDatabase(Data) @calc.route('/result', methods=["GET", "POST"]) def calc_result(): global sum_result, avg_eps, avg_dh, sd_eps, sd_dh, r database_datas = control_database.get_alldata() calculate_eps = Calclate(database_datas, estimate_proxy_size) calculate_dh = Calclate(database_datas, development_hours) # 平均の計算 avg_eps = calculate_eps.calc_avg() avg_dh = calculate_dh.calc_avg() # 標準偏差の計算 sd_eps = calculate_eps.calc_sd() sd_dh = calculate_dh.calc_sd() return render_template("calc/result.html", avg1=avg_eps, avg2=avg_dh, sd1=sd_eps, sd2=sd_dh)

caluclate.py

from flask import ( Blueprint, render_template, request, redirect, url_for, send_from_directory, current_app, make_response, jsonify ) from math import sqrt import uuid from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm from pathlib import Path from apps.calc.models import Data from apps.app import db import pandas as pd import os import matplotlib.pyplot as plt from apps.calc.classes.input import Input from apps.calc.classes.control_database import ControlDatabase class Calclate: def __init__(self, datas, column_name): self.datas = datas self.column_name = column_name def retrun_datalist(self): data_list = [] column_name = self.column_name for data in self.datas: data_list.append(data.column_name) return data_list def select_data_column(self): pass # 総和の計算 def calc_sum(self): data_list = self.retrun_datalist() sum_result = sum(data_list) return sum_result # 平均の計算 def calc_avg(self): data_list = self.retrun_datalist() try: avg = self.calc_sum() / len(data_list) except ZeroDivisionError: avg = None return avg # 標準偏差の計算 def calc_sd(self): source_sd = [] data_list = self.retrun_datalist() avg = self.calc_avg() if avg == None: try: for i in range(len(data_list)): source_sd.append((data_list[i] - avg) ** 2) sd_2 = sum(source_sd) / len(source_sd) sd = round(sqrt(sd_2), 2) except ZeroDivisionError: sd = None return sd

models.py

from datetime import datetime from apps.app import db from werkzeug.security import generate_password_hash class Data(db.Model): __tablename__ = "datas" id = db.Column(db.Integer, primary_key=True) estimate_proxy_size = db.Column(db.Float) development_hours = db.Column(db.Float) created_at = db.Column(db.DateTime, default=datetime.now)

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

can110

2022/05/28 03:51 編集

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQLite

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

オブジェクト指向

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

データベース

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

Python

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