2010-08-14 56 views
1

我有一個簡單的問題。在我的表中有列ID,名稱,內容,時間戳。如果我使用session.query(table).all()結果是表類對象的數組。所以我沒有修改一個或多個對象並更新的問題,或者在關聯中使用這些對象。但我只需要列ID和名稱。如果使用session.query(table.id,table.name)我得到結果元組與id和名稱。在更新中使用這個元組 - 它可能很簡單,但是它的代碼很醜陋。在協會中也是如此。如果我只想使用ID進行關聯,那麼就會有不必要的數據庫加載。如何將結果作爲表類對象的數組獲取指定的列?

到現在爲止我用簡單的代碼來獲取表類對象的數組僅查詢指定列:
for row in session.query(table.id, table.name).all():
data.append(table(id=row.id, name=row.name))

這使更新容易,但使用的關聯是複雜的。例如,我從我的代碼中得到表格對象數組中的10行。我想要關聯1行到table2。
如果我使用: session.add(table2(name = 'test', association = data[1]))並提交,
sqlalchemy要創建新的table2行,新的關聯錶行和新的錶行(這是第一個,關聯到table2)。

有沒有辦法得到結果作爲表對象,而不是元組,具有指定的列的數組,結果返回對象是相同的,如果使查詢(表)?

對不起,我的英語無論如何,我從來沒有用它來描述複雜的問題,直到現在。

回答

0

如果您想減少從db加載的列的數量與.query(Table),從而減少開銷,您可能想要定義關係時推遲不需要的列。說idname是你的更新和info的本質不是,你可以告訴映射推遲info

mapper(Class, table, properties={ 
    "info":column_property(table.c.info, deferred=True), 
    ... other properties .... 
}) 

所以,當你做session.query(Class),信息將不會在選擇採摘。只有在代碼obj.info的某個地方,即顯式調用此屬性時,纔會調用它。

相關問題