SQLAlchemy:混合值对象,查询元组结果

时间:2011-07-21 20:32:54

标签: python sqlalchemy pylons

我正在尝试使用混合值对象构建custom comparators的文档中的示例

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"

这是为了什么?

1 个答案:

答案 0 :(得分: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(),那么会将其更改为其他内容。我不知道在那里完全是必要的。