Flask -sqlalchemy обновляет поле динамически, указывая имя столбца - PullRequest
0 голосов
/ 12 июля 2020

Как я могу динамически обновлять поле программно, указав имя столбца в 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)

Большое спасибо

1 Ответ

0 голосов
/ 12 июля 2020
• 1000 предотвращает использование переменной в качестве поля и выглядело бы замечательно, если бы они не учитывали это.
...