Проблемы загрузки набора объектов с использованием SQLAlchemy - PullRequest
2 голосов
/ 20 мая 2009

Я использую Turbogears2 и SQLAlchemy для разработки веб-приложения. У меня есть две сопоставленные таблицы O1 и O2. O2 имеет отсортированный список O1s в «единиц». В какой-то момент я хочу запросить все O2 и ссылочные O1.

К сожалению, приведенный ниже запрос завершается неудачно, поскольку таблица O2 содержит псевдоним в запросе, а столбец, на который ссылается фраза order_by, больше не известен.

Я хотел бы знать, как я могу решить эту проблему, оставаясь, по возможности, в декларативном синтаксисе.

base = declarative_base()

class O1(base):
    __tablename__ = 'O1'
    value = Column(Integer)
    o2_id = Column(Integer, ForeignKey('O1.id')) # The culprit

class O2(base):
    __tablename__ = 'O2'
    id = Column(Integer, primary_key=True)
    ones = relation('O1', order_by = ['O1.value'])


Session.query(O2).options(eagerload('ones')).all() # Throws an error

1 Ответ

3 голосов
/ 20 мая 2009

Используйте лямбду элементов клаузулы для позднего связывания заказа, например, так:

ones = relation('O1', order_by=lambda:[O1.value])

Или, как еще один вариант, сделать весь order_by строкой, например:

ones = relation('O1', order_by='O1.value, O1.something_else')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...