gpt4 book ai didi

python - 访问模型的列时,由 'column_property' 定义的 SQLAlchemy 列未显示

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:26 28 4
gpt4 key购买 nike

我想要在我的 sqlalchemy 模型中有一列 total,该列等于 amount *price。列值可以通过 object.total 访问,但列名称不会显示在 model.__table__.columns.keys()

我尝试将总计设置为混合属性和列属性。当我访问列时,这两种方法都无法包含该列。

这是我的模型:

class RawMaterials(db.Model):
__tablename__ = 'raw_materials'
id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.String(64))
product = db.Column(db.String(64))
amount = db.Column(db.Integer)
price = db.Column(db.Integer)
total = column_property(amount * price)

def __repr__(self):
return '<id:{} product:{}>'.format(self.id, self.product)

这是我查询模型列的位置:

@app.route('/tables')
@login_required
def tables(methods=["GET", "POST"]):
if request.args.get('data'):
table = request.args.get('data').lower().replace(" ","_")
else:
table = 'raw_materials'
database = get_db_model(table)
materials = database.query.all()
columns = database.__table__.columns.keys()
new_mats = format_data(materials, columns)
title = table.replace("_", " ").upper()
return render_template('tables.html.j2', title=title, materials=materials, columns=columns)

如果我将 columns 变量打印到控制台中,它将返回:['id', '类型', '产品', '金额', '价格']我希望它返回:['id', '类型', '产品', '金额', '价格', '总计']

我希望总计出现在列中,但事实并非如此。

最佳答案

使用column_property()函数时,您需要确保 该表达式与为 RawMaterials 类发出的 SELECT 语句兼容。您可以尝试使用Hybrid , 反而。

from sqlalchemy.ext.hybrid import hybrid_property

class RawMaterials(db.Model):
__tablename__ = 'raw_materials'
id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.String(64))
product = db.Column(db.String(64))
amount = db.Column(db.Integer)
price = db.Column(db.Integer)

def __repr__(self):
return '<id:{} product:{}>'.format(self.id, self.product)

@hybrid_property
def total(self):
return self.amount * self.price

此处,total 属性返回 amountprice 属性的乘积。对于 RawMaterials 实例,这种乘法在 Python 中使用标准 Python 描述符进行。

关于python - 访问模型的列时,由 'column_property' 定义的 SQLAlchemy 列未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com