2011-08-26 24 views
-1

鑑於以下SQL查詢,Python對象

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass') 
    cursor = cnxn.cursor() 
cursor.execute("select field1, field2, field3, fieldA, fieldB, fieldB from users") 
    row = cursor.fetchone() 

我想通過行對象作爲參數在創建一個新對象,例如

A = CertainTypeOfApple(row) 

在類CertainTypeOfApple的__init__(self,row),我想變換的字段,即FIELD1,FIELD2,...,到對象屬性中的每個。有沒有直接的方法來做到這一點?換句話說,我想這樣做在一個更緊湊的方式:

self.field1 = row.field1 
self.field2 = row.field2 
... 

回答

0

如果你的領域被稱爲串,你應該使用setattr內置函數,從它的名字設置字段列表。

fields = ["field1", "field2", "field3", "fieldA", "fieldB"] 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass') 
cursor = cnxn.cursor() 
cursor.execute("select %s from users" % fields) 
row = cursor.fetchone() 
CertainTypeTypeOfApple(row, fields) 

和你的init會是什麼樣子:

def __init__(self, row, fields): 
    for field in fields: 
     setattr(self, field, getattr(row, field)) 

在我的節目我有一個代表各表類之一,我們用這種方法來從數據庫中加載數據(我們使用SQLite做,但你應該可以用SQL服務器來完成它)。然而,表格中的表格擁有字段清單,使得事情變得更加清潔(請參閱our class in pynmj