如何通过在FlaskSQLAlChemy中指定列名,以编程方式动态更新字段?我有一个PTc
班。它将只有一个很长的行,所以我可以使用以下信息来提取所有信息:
Target = PTc.query.order_by(PTc.id).first()
我可以手动更新字段,例如Target.price = 2
,然后提交。如何动态更新?即,当程序运行时,它可能想要根据情况更新价格、金额或可用性。
如果我将列名保存到变量columnToUpdate = 'amount'
,然后尝试Target.columnToUpdate = 10
,它当然会失败,因为它认为这是一个列。否则,我不得不检查每个列的条件,这可能会很麻烦,因为有大量的列:
if columnToUpdate == 'price'
Target.price = 20
elif columnToUpdate =='amount':
Target.amount = 20
...
elif columnToUpdate =='XYZ':
Target.amount = ABC
文档仅以最少的细节指定插入、删除和选择。班级:
class PTc(db.Model):
# id column
id = db.Column(db.Integer, primary_key=True)
goldPrice = db.Column(db.Integer, nullable=False)
goldStock = db.Column(db.Integer, nullable=False)
goldPriceChange = db.Column(db.String(50), nullable=False)
goldHistory = db.Column(db.String(100), nullable=False)
goldAverage = db.Column(db.Integer, nullable=False)
rmPrice = db.Column(db.Integer, nullable=False)
rmStock = db.Column(db.Integer, nullable=False)
rmPriceChange = db.Column(db.String(50), nullable=False)
rmHistory = db.Column(db.String(100), nullable=False)
rmAverage = db.Column(db.Integer, nullable=False)
gemsPrice = db.Column(db.Integer, nullable=False)
gemsStock = db.Column(db.Integer, nullable=False)
gemsPriceChange = db.Column(db.String(50), nullable=False)
gemsHistory = db.Column(db.String(100), nullable=False)
gemsAverage = db.Column(db.Integer, nullable=False)
oilPrice = db.Column(db.Integer, nullable=False)
oilStock = db.Column(db.Integer, nullable=False)
oilPriceChange = db.Column(db.String(50), nullable=False)
oilHistory = db.Column(db.String(100), nullable=False)
oilAverage = db.Column(db.Integer, nullable=False)
2条答案
按热度按时间p4tfgftt1#
多亏了Gord的解决方案,
setattr(PTc, "goldPrice", 200)
就是我想要的。如果文档中的
class.field = x
约定禁止使用变量作为字段,那么是否存在另一种特定于SQLAlChemy的方法会很有趣,如果它们没有考虑到这一点的话会显得很了不起。soat7uwm2#
这真是太有帮助了!谢谢,@戈德·汤普森和@Murchie85!
这就是使用它的方式。基本上,您可以通过这种方式将动态值用于COLUMN_NAME。