2013-12-12 156 views
1

我喜歡在web2py中下表定義Excuding id字段:從選擇查詢

my_table = db.define_table('my_table', 
    Field('mt_table_id', 'id', requires=[IS_NOT_EMPTY()]), 
    Field('field_one', 'string', length=256, requires=[IS_NOT_EMPTY()]), 
    Field('field_two', 'string', length=256, requires=[IS_NOT_EMPTY()]), 
    Field('field_three', 'string', length=256, requires=[IS_NOT_EMPTY()]), 
    primarykey=['my_table_id']) 

的問題是,如果我執行查詢:

results = db().select(db.my_table.my_table_id, db.my_table.field_one, db.my_table.field_two, db.my_table.field_three).as_list() 

我得到一個額外的字段名稱爲'id'以及字段'my_table_id'和我在select中添加的其他字段。

由web2py的執行的SQL是:

SELECT my_table.my_table_id, my_table.field_one, my_table.field_two, my_table.field_three FROM my_table; 

這給正確的輸出。

我該如何排除這個無關的'id'字段,或者至少從輸出中刪除它?

+0

謝謝你的答案。我正在糾正數據庫的問題。 – navanitachora

+0

我正在使用@ anthony的答案糾正數據庫的問題。 – navanitachora

回答

0

如果您聲明的是「id」類型的字段,那麼您不應該使用「primarykey」參數。僅當該表沒有用作主鍵的自動增量整數字段時才使用「primarykey」參數。

0

我想web2py會自動爲每個查詢/表添加一個id字段。

你可以做什麼要麼將該字段設置爲None,但它不會刪除它

for result in results: 
    result.id = None 

或轉換results作爲dictionnary並刪除id關鍵

results = results.as_dict() 
for result in results 
    result.pop("id", None) 

希望它幫助並熱衷於知道是否有更好的答案:)

編輯: 根據web2py docume ntation ...

請勿聲明名爲「id」的字段,因爲無論如何都由web2py創建。每個表默認情況下都有一個名爲「id」的字段。它是一個自動增量整數字段(從1開始),用於交叉引用和使每條記錄都是唯一的,所以「id」是主鍵。 (注意:從1開始的id是後端特定的,例如,這不適用於Google App Engine NoSQL。)

(可選)您可以定義type ='id'的字段,web2py將使用此字段作爲自動增量ID字段。除了訪問遺留數據庫表時,不建議這樣做。由於某些限制,您還可以使用不同的主鍵,這在「傳統數據庫和鍵控表」一節中討論。