[英]How to add multiple columns in flask sqlachemy and return it as a single column
我正在嘗試創建一個數據庫 model,其中的列是其他列的驅動列,因此在這種情況下,它是一個薪資系統,其中 total_benfits 是一個列,它是添加具有總收益的其他列的結果
from flask_login import UserMixin
from datetime import datetime
from app import db
class Payroll(db.Model):
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(500),unique=False, nullable=False)
lastname = db.Column(db.String(500),unique=False, nullable=False)
email = db.Column(db.String(500),unique=True, nullable=False)
id_number = db.Column(db.String(500),unique=True, nullable=False)
bank_details = db.Column(db.String(500),unique=True, nullable=False)
retainer = db.Column(db.Float, unique=False, nullable=False)
discretionary_allowance = db.Column(db.Float, unique=False, nullable=True)
weekly_incentives = db.Column(db.Float, unique=False, nullable=True)
overtime = db.Column(db.Float, unique=False, nullable=True)
coupons_value = db.Column(db.Float, unique=False, nullable=True)
performance_incentives = db.Column(db.Float, unique=False, nullable=True)
anniversary_payout = db.Column(db.Float, unique=False, nullable=True)
shift_allowance = db.Column(db.Float, unique=False, nullable=True)
back_pay = db.Column(db.Fl`your text`oat, unique=False, nullable=True)
agent_benefits = db.Column(db.Float, unique=False, nullable=True)
total_earnings = db.column_property(retainer + discretionary_allowance + weekly_incentives + overtime + coupons_value + performance_incentives + anniversary_payout + shift_allowance +back_pay + agent_benefits, db.Float)
medical_aid = db.Column(db.Float, unique=False, nullable=True)
nssa = db.Column(db.Float, unique=False, nullable=True)
canteen = db.Column(db.Float, unique=False, nullable=True)
cicm = db.Column(db.Float, unique=False, nullable=True)
zol = db.Column(db.Float, unique=False, nullable=True)
withholding_tax = db.Column(db.Float, unique=False, nullable=True)
medical_loan = db.Column(db.Float, unique=False, nullable=True)
staff_Loan = db.Column(db.Float, unique=False, nullable=True)
independent_contractors_deduction = db.Column(db.Float, unique=False, nullable=True)
fixed_deductions = db.Column(db.Float, unique=False, nullable=True)
fixed_deductions_months = db.Column(db.Integer, unique=False, nullable=True)
total_fixed_deductions = db.column_property(fixed_deductions * fixed_deductions_months, db.Float)
total_deductions = db.column_property(medical_aid + nssa + canteen + cicm + zol + withholding_tax + medical_loan + staff_Loan + independent_contractors_deduction + total_fixed_deductions, db.Float)
net_Pay = db.column_property(total_earnings - total_deductions, db.Float)
def __repr__(self):
return f"Net Salary for ('{self.firstname}','{self.lastname}','is','{self.net_Pay}')"
但我收到以下錯誤:
net_Pay = db.column_property(total_earnings - total_deductions, db.Float)
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for -: 'ColumnProperty' and 'ColumnProperty'
使用column_property()
方法時,你的屬性所在的model class 必須和SELECT
表達式兼容。 相反,您可以使用 SQLAlchemy 中的SQLAlchemy
hybrid_property()
方法。 您可以在此處找到詳細信息。
from flask_login import UserMixin
from datetime import datetime
from app import db
from sqlalchemy.ext.hybrid import hybrid_property
class Payroll(db.Model):
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(500),unique=False, nullable=False)
lastname = db.Column(db.String(500),unique=False, nullable=False)
email = db.Column(db.String(500),unique=True, nullable=False)
id_number = db.Column(db.String(500),unique=True, nullable=False)
bank_details = db.Column(db.String(500),unique=True, nullable=False)
retainer = db.Column(db.Float, unique=False, nullable=False)
discretionary_allowance = db.Column(db.Float, unique=False, nullable=True)
weekly_incentives = db.Column(db.Float, unique=False, nullable=True)
overtime = db.Column(db.Float, unique=False, nullable=True)
coupons_value = db.Column(db.Float, unique=False, nullable=True)
performance_incentives = db.Column(db.Float, unique=False, nullable=True)
anniversary_payout = db.Column(db.Float, unique=False, nullable=True)
shift_allowance = db.Column(db.Float, unique=False, nullable=True)
back_pay = db.Column(db.Fl`your text`oat, unique=False, nullable=True)
agent_benefits = db.Column(db.Float, unique=False, nullable=True)
medical_aid = db.Column(db.Float, unique=False, nullable=True)
nssa = db.Column(db.Float, unique=False, nullable=True)
canteen = db.Column(db.Float, unique=False, nullable=True)
cicm = db.Column(db.Float, unique=False, nullable=True)
zol = db.Column(db.Float, unique=False, nullable=True)
withholding_tax = db.Column(db.Float, unique=False, nullable=True)
medical_loan = db.Column(db.Float, unique=False, nullable=True)
staff_Loan = db.Column(db.Float, unique=False, nullable=True)
independent_contractors_deduction = db.Column(db.Float, unique=False, nullable=True)
fixed_deductions = db.Column(db.Float, unique=False, nullable=True)
fixed_deductions_months = db.Column(db.Integer, unique=False, nullable=True)
def __repr__(self):
return f"Net Salary for ('{self.firstname}','{self.lastname}','is','{self.net_Pay}')"
@hybrid_property
def total_earnings(self):
return self.retainer + self.discretionary_allowance + self.weekly_incentives + self.overtime + self.coupons_value + self.performance_incentives + self.anniversary_payout + self.shift_allowance + self.back_pay + self.agent_benefits
@hybrid_property
def total_fixed_deductions(self):
return self.fixed_deductions * self.fixed_deductions_months
@hybrid_property
def total_deductions(self):
return self.medical_aid + self.nssa + self.canteen + self.cicm + self.zol + self.withholding_tax + self.medical_loan + self.staff_Loan + self.independent_contractors_deduction + self.total_fixed_deductions
@hybrid_property
def net_Pay(self):
return self.total_earnings - self.total_deductions
因此,您希望對Payroll
實例進行的計算在 Python 中執行。
對於Payroll
實例,您可以通過以下方式訪問total_earnings
屬性:
payroll.total_earnings
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.