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

Flask 动态插入数据瓶SQL炼金术,flask,dynamic,sqlalchemy,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))

我有一个定义如下的模型:

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个

我喜欢使用这样的助手函数来动态更新数据

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()
您可以添加尽可能多或尽可能少的数据来“更新列”,因为helper函数中的**update\u vals将消耗整个dict。不要忘记使用“where\u colums”dict定义要更新的行