2013-02-17 22 views
1

我正在試圖做一個數據庫插入,並有一個約有二十行的表。插入看起來像這樣:DRY版本的python if語句

if not title.name: 
    title.name = data['title'] 
if not title.synopsis: 
    title.synopsis = data['synopsis'] 
... 

基本上,我更新行如果它們不存在每個數據庫列。

什麼是更乾淨,更有效的方式來做到這一點?

回答

3
for column in ('name', 'synopsis', 'something', 'other'): 
    if not getattr(title, column): 
     setattr(title, column, data[column]) 
+1

你應該檢查是否hasattr(標題,列) – 2013-02-17 23:05:44

+0

@ manu-fatto:我正在遵循問題中的邏輯。 – 2013-02-17 23:07:06

1

您可以使用or

title.name = title.name or data['title'] 
title.synopsis = title.synopsis or data['synopsis'] 

或者你也可以動態地做到這一點:

for attr in data: 
    if not getattr(title, attr): 
     setattr(title, attr, data[attr]) 
+2

如果'data'是一個字典,則不需要使用'.keys()'。遍歷字典遍歷其鍵。 – Blender 2013-02-17 23:06:53

+0

@Blender:確實如此。 – 6502 2013-02-18 08:02:14

1

使用getattrsetattr功能:

for attribute in ['title', 'synopsis']: 
    if not getattr(title, attribute): 
     setattr(title, attribute, data[atribute]) 

你可以閱讀更多關於他們here