Динамически вставлять данные Flask SQL Alchemy - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть модель, определенная следующим образом:

class DealData(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    deal_id = db.Column(db.Integer, db.ForeignKey('deals.id'))
    data1 = db.Column(db.Numeric(17,2))
    data2 = db.Column(db.Numeric(17,2))
    data3 = db.Column(db.Numeric(17,2))
    data4 = db.Column(db.Numeric(17,2))
    data5 = db.Column(db.Numeric(17,2))
    data6 = db.Column(db.Numeric(17,2))
    data7 = db.Column(db.Numeric(17,2))
    data8 = db.Column(db.Numeric(17,2))

class DataTitle(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    subVertical_id = db.Column(db.Integer, db.ForeignKey('sub_vertical.id'))
    businessModel_id = db.Column(db.Integer, db.ForeignKey('business_model.id'))
    data1 = db.Column(db.Numeric(17,2))
    data2 = db.Column(db.Numeric(17,2))
    data3 = db.Column(db.Numeric(17,2))
    data4 = db.Column(db.Numeric(17,2))
    data5 = db.Column(db.Numeric(17,2))
    data6 = db.Column(db.Numeric(17,2))
    data7 = db.Column(db.Numeric(17,2))
    data8 = db.Column(db.Numeric(17,2))

В этой таблице две таблицы. Заголовок данных будет содержать заголовок данных, а сама таблица данных будет таблицей данных.

Как динамически вставить данные в таблицу dealData? В некоторых случаях это может быть 3 данных, в некоторых случаях может быть 5.

1 Ответ

0 голосов
/ 11 ноября 2019

Мне нравится использовать вспомогательную функцию, подобную этой, для динамического обновления данных

def construct_update(table_name, where_vals, update_vals):
    query = table_name.update()
    for k, v in where_vals.items():
        query = query.where(getattr(table_name.c, k) == v)
    return query.values(**update_vals)

Приведенная выше функция возвращает запрос, который можно выполнить с помощью:

table = db.Table('DealData')
where_columns = {"deal_id": 1}
update_columns = {"data1": data_to_update1, "data2": data_to_update2}
query = construct_update(table, where_columns, update_columns)

my_session = Session(engine)
result = my_session.execute(query)
my_session.close()

, который можно добавить какмного или столько данных, сколько вы хотите, чтобы "update_columns", потому что ** update_vals в вспомогательной функции будет потреблять весь dict. Не забудьте определить, какую строку вы хотите обновить, используя dict "where_colums"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...