如何通过在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条答案
按热度按时间c7rzv4ha1#
感谢Gord的解决方案,
setattr(PTc, "goldPrice", 200)
就是我想要的。如果文档中的
class.field = x
约定禁止使用变量作为字段,那么是否存在另一种特定于SQLAlChemy的方法会很有趣,如果它们没有考虑到这一点的话会显得很了不起。qvtsj1bj2#
这真是太有帮助了!谢谢,高德·汤普森和默奇85岁!
这就是使用它的方式。基本上,通过这种方式,您可以对列使用动态值。