2011-07-21 71 views
3

我試圖按照從文檔的例子中使用混合值對象建立custom comparatorsSQLAlchemy的:混合值對象,查詢結果的元組

class CaseInsensitiveWord(Comparator): 
    "Hybrid value representing a lower case representation of a word." 

    def __init__(self, word): 
     if isinstance(word, basestring): 
      self.word = word.lower() 
     elif isinstance(word, CaseInsensitiveWord): 
      self.word = word.word 
     else: 
      self.word = func.lower(word) 

    def operate(self, op, other): 
     if not isinstance(other, CaseInsensitiveWord): 
      other = CaseInsensitiveWord(other) 
     return op(self.word, other.word) 

    def __clause_element__(self): 
     return self.word 

    def __str__(self): 
     return self.word 

    key = 'word' 
    "Label to apply to Query tuple results" 

我不明白,但是,爲什麼這個加入類定義的末尾:

key = 'word' 
"Label to apply to Query tuple results" 

這是幹什麼用的?

回答

3

雖然它不是一個完全烘焙的Python功能,但約定是以與功能和方法相同的方式評論屬性,即通過在屬性下放置一個字符串。類似上面的評論可以通過Sphinx等工具找到。您可以在http://www.sqlalchemy.org/docs/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.class_manager等地方看到生成這些文檔字符串的示例。

編輯:哦爲什麼它有一個實際的「.key」。當你說:

for row in session.query(MyClass.mycustomthing, MyClass.myothercustomthing): 
    print row.word, row.someotherword 

「word」和「someotherword」元組鍵是每個比較器上的「.key」的值。如果你要在它上面調用label(),那會改變它到別的東西。我不知道完全有必要在那裏。

+0

謝謝,但我也很好奇,屬性本身有什麼意義?鍵? – john