Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2013 21:55:05

f1aky
Зарегистрирован: 2013-01-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy вопрос по query

есть две модельники

class A(Base):
...
x = Column(Float)

class B(Base):
...
x = Column(Float)
возможно ли однис запросом выбрать данные из двух таблиц, чтл типо такого(знаю про синтасическую ошибку)
db.session.query(A B).filter(A.x < 5, B.x < 5).all()
возвращает должег список из A и B обьектов.
или только двумя запросами и слаживать списки?

вариант с наследованием не подходит, т.к и A и В уже наследуют две разные модели

Отредактировано f1aky (Июнь 27, 2013 22:24:57)

Офлайн

#2 Июнь 28, 2013 10:55:38

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Sqlalchemy вопрос по query

тебе нужен union

Офлайн

#3 Июнь 28, 2013 13:39:43

f1aky
Зарегистрирован: 2013-01-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy вопрос по query

union и union_all не работает с обьектами, т.е.

>>>qa = session.query(A.x).filter(A.x<=2)
>>>qa.all()
[(0,), (1,), (2,)]
>>>qb = session.query(B.x).filter(B.x>=0)
>>>qb.all() # prints
[(0,), (1,), (2,)]
>>>qa.union_all(qb).all()
[(0,), (1,), (2,), (0,), (1,), (2,)]
так работает, но если возвращать обьект, а не атрибут, то не работает
>>>qa = session.query(A.).filter(A.x<=2)
>>>qa.all()
[<A object at ....>, <A object at ...>, <A object at ...>]
>>>qb = session.query(B).filter(B.x>=0)
>>>qb.all() # prints
[<B object at ...>, <B object at ...>, <B <object at ...>]
>>>qa.union_all(qb).all()
[<A object at ....>, <A object at ...>, <A object at ...>]
выводит только А обьекты. Использование union вместо union_all нечего не меняет.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version