用于修改表中各种列组合的良好设计

时间:2016-01-22 09:39:07

标签: python design-patterns database-design

我有一个包含多个(~15)列的数据库表。

我要求在给定主键的行中,以列的组合方式更新数据。

EG。

Update Col1,Col2,Col3 where PK is something

Update Col4 where PK is something

Update Col5,Col7,Col9,Col10 where PK is something

Update Col5,Col10 where PK is something

我使用Python并编写了原始查询来处理这种情况。我编写了单独的函数来管理每个需求。它们看起来像这样:

requirement1( Col5,val1,Col7,val2,Col9,val3,Col10,val4 )
{
    Update TABLE SET (Col5,Col7,Col9,Col10) VALUES (val1,val2,val3,val4)
}

requirement2( Col5,val1,Col10,val2 )
{
    Update TABLE SET (Col5,Col10) VALUES (val1,val2)
}

但此类案件的数量已增加到太多。有没有一个好的设计来处理这个?

类似于一般功能:

UpdateTableValue(ColumnName1,ColumnValue1,ColumnName2,ColumnValue2, and so on )
{
    Update TABLE SET (ColumnName1,ColumnName2.. ) VALUES (ColumnValue1,ColumnValue2 .. )
}

然后用户可以致电:

UpdateTableValue(Col5,val1,Col7,val2,Col9,val3,Col10,val4)
UpdateTableValue(Col7,val,Col3,val2)

P.S。我不是要求一个好的DB设计来处理这个(所以没有OR映射等)。我想从查询包装器的角度理解一个可以处理这个问题的好设计。

1 个答案:

答案 0 :(得分:2)

如下:

def update_table_value(*args):
    sql = "Update TABLE SET ({}) VALUES ({}) "
    sql.format(",".join([args[0::2]]),
               ",".join([args[1::2]]))
return sql

请注意:

  • args获取您放入函数的所有参数,并创建一个名为args
  • 的列表
  • args [0 :: 2]选择列表中的第二个条目