2016-01-22 47 views
0

我有一個包含多個(〜15)列的數據庫表。好的設計,用於修改表中各列的各種組合

我有要求,哪裏數據更新在一個行,列的組合,給定的主鍵。

例如,

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) 

附:我不是要求一個好的數據庫設計來處理這個(所以沒有OR映射等)。我想從查詢包裝的角度來理解一個好的設計,它可以處理這個問題。

+0

Google'python sql api'。你不想使用ORM,而是從'可以處理這個問題的查詢包裝器'的角度來看'一個好的設計',看看這個API的適當的簡單子集。 – philipxy

回答

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]選擇列表中的第二個條目