2016-07-22 61 views
1

的SQLAlchemy的ORM允許:使用變量引用的列名(SQLAlchemy的ORM)

instance1 = Class1() 
instance1.foo = 'bar' 

我想做的事,然而,是將它作爲一個變量引用的列名「富」實例,是這樣的:

column_name = 'foo' 
instance1[column_name] = 'bar' # or 
instance1.column(column_name) = 'bar' # or 
instance1.Column(column_name) = 'bar' 

或者,也許做這樣的事情:

instance1=Class1(foo='bar') # or 
instance1=Class1('foo':'bar') 

或:

dict = {'foo':'bar'} 
instance1 = Class1(dict) # or 
instance1 = Class1(**dict) # <-- THIS *DOES* WORK 

當然,以上都不是。請問有沒有一種方法可以用變量引用列名?我想要做的事情的更大圖片版本是將數據收集到字典中,其中鍵與多個表中的列名稱的子集相匹配。然後我想甩什麼我已經聚集在字典到這些表:

instance1 = Class1() 
instance2 = Class2() 
for key in data_dictionary: 
    instance1[key] = data_dictionary[key] 
    instance2[key] = data_dictionary[key] 

或者乾脆:

instance1 = Class1(data_dictionary) 
instance2 = Class2(data_dictionary) 

感謝您的幫助, 安德魯

+1

1.'Class1(** dict)'應該工作,如果你沒有重寫默認的構造函數。 2.你可以使用['setattr'](https://docs.python.org/2/library/functions.html#setattr) – univerio

+1

instance = Class1(** dict)確實有用,謝謝你univerio。這是我認爲我嘗試過的一件事......對不起浪費你的時間! –

回答

1

謝謝univerio - 以下作品:

dict = {'foo':'bar'} 
instance = Class1(**dict) 

正如您的其他建議:

setattr(instance, 'foo', 'bar')