【问题标题】:Flask-sqlalchemy update a field dynamically by specifying column nameFlask-sqlalchemy 通过指定列名动态更新字段
【发布时间】:2020-07-11 21:32:24
【问题描述】:

如何通过在 Flask-SQLAlchemy 中指定列名以编程方式动态更新字段

我有一个名为 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)

非常感谢

【问题讨论】:

  • 你试过setattr(obj_name, "price", 20) 吗?
  • 害怕不高兴:AttributeError: type object 'PTc' has no attribute 'setattr'
  • 类 PTc 长什么样,是 Json/dict 吗?
  • 在描述中更新了类,它与他们的教程flask-sqlalchemy.palletsprojects.com/en/2.x中给出的示例非常相似
  • @Murchie85 - setattr 为我工作。请注意,它是一个内置函数,而不是类方法。

标签: python sqlite sqlalchemy flask-sqlalchemy


【解决方案1】:

setattr(PTc, "goldPrice", 200) 是我一直在寻找的,感谢 Gord 提供的解决方案。

鉴于记录在案的class.field = x 约定阻止将变量用作字段,并且如果他们没有考虑到这一点,这将看起来很显着。

【讨论】:

  • 你是如何将它提交给数据库的?具体来说,您是如何使用 setattr() 调用的?
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
相关资源
最近更新 更多