SQLAlchemy: объект гибридного значения, результаты кортежа запросов - PullRequest
3 голосов
/ 22 июля 2011

Я пытаюсь следовать примерам из документации по созданию пользовательских компараторов с использованием объектов гибридных значений,

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 Ответ

3 голосов
/ 22 июля 2011

Хотя это не полностью запеченная функция Python, условием является комментировать атрибуты так же, как функции и методы, то есть помещая строку под атрибутом.Комментарии, подобные приведенным выше, подбираются такими инструментами, как Sphinx.Вы можете видеть примеры того, как эти строки документации генерируются в таких местах, как http://www.sqlalchemy.org/docs/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.class_manager.

edit: о, почему у него есть фактический «.key».Когда вы говорите:

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

, ключи кортежей «word» и «someotherword» являются значением «.key» на каждом компараторе.если бы вы вызвали label () для него, это изменило бы его на что-то другое.Я не знаю, нужно ли вообще быть там.

...