动态插入数据烧瓶SQL炼金术

时间:2019-11-10 11:48:05

标签: flask dynamic sqlalchemy

我的模型定义如下:

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 :(得分:0)

我喜欢使用这样的帮助器功能来动态更新数据

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将消耗整个字典。不要忘记使用“ where_colums”字典来定义要更新的行

相关问题