数据库
首页 > 数据库> > python-SQLAlchemy:混合值对象,查询元组结果

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

作者:互联网

我正在尝试遵循有关使用混合值对象构建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"

这个是来做什么的?

解决方法:

虽然这不是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(),则会将其更改为其他内容.我不知道根本没有必要在那儿.

标签:pylons,sqlalchemy,python
来源: https://codeday.me/bug/20191208/2089243.html