SQLAlchemy Соединение с проблемой подзапроса

Я пытаюсь перевести SQL в SQLAlchemy. SQL-версия запроса, который я хочу, выглядит следующим образом:

SELECT * from calendarEventAttendee JOIN calendarEventAttendanceActual ON calendarEventAttendanceActual.id = calendarEventAttendee.attendanceActualId LEFT JOIN (SELECT bill.id, bill.personId, billToEvent.eventId FROM bill JOIN billToEvent ON bill.id = billToEvent.billId) b ON b.eventId = calendarEventAttendee.eventId AND b.personId = calendarEventAttendee.personId WHERE b.id is NULL 

Мой запрос SQLAlchemy выглядит следующим образом:

 query = db.session.query(CalendarEventAttendee).join(CalendarEventAttendanceActual) sub_query = db.session.query(Bill, BillToEvent).join(BillToEvent, BillToEvent.billId == Bill.id).subquery() query = query.outerjoin(sub_query, and_(sub_query.Bill.personId == CalendarEventAttendee.personId, Bill.eventId == CalendarEventAttendee.eventId)) results = query.all() 

Я получаю сообщение об ошибке AttributeError: 'Alias' object has no attribute 'Bill'

Если я настрою запрос SQLAlchemy на следующее:

 sub_query = db.session.query(Bill, BillToEvent).join(BillToEvent, BillToEvent.billId == Bill.id).subquery() query = query.outerjoin(sub_query, and_(sub_query.Bill.personId == CalendarEventAttendee.personId, sub_query.BillToEvent.eventId == CalendarEventAttendee.eventId)) 

results = query.all ()

Я получаю сообщение об ошибке AttributeError: Bill

Любая помощь будет оценена, спасибо!

One Solution collect form web for “SQLAlchemy Соединение с проблемой подзапроса”

Когда вы вызываете subquery() , доступ к объектам отсутствует , а только к столбцам через .c.{column_name} accessor.

sub_query этого sub_query следующие действия для sub_query : загрузите только нужные столбцы, чтобы избежать коллизий имен:

 sub_query = db.session.query( Bill.id, Bill.personId, BillToEvent.eventId ).join(BillToEvent, BillToEvent.billId == Bill.id).subquery() 

Затем в вашем запросе используйте имена столбцов с .c.column_name :

 query = query.outerjoin( sub_query, and_( sub_query.c.personId == CalendarEventAttendee.personId, sub_query.c.eventId == CalendarEventAttendee.eventId) ) results = query.all() 
  • Как установить одно-многое и одно отношение в одно и то же время в Flask-SQLAlchemy?
  • Как удалить все элементы из коллекции «многие ко многим» в SqlAlchemy?
  • Flask: чертежи, необходимые для фабрик приложений?
  • Как выполнить необработанный запрос с возвратом в sqlalchemy
  • Проверка в SQLAlchemy
  • SQLAlchemy - динамически строит фильтр запросов из dict
  • Как использовать помеченную колонку в sqlalchemy filter?
  • Работают ли любые ORM-устройства Python (SQLAlchemy?) С Google App Engine?
  • sqlalchemy подключиться к базе данных VPS
  • Импорт / контекст флажка-SQLAlchemy
  • Проблемы с scoped_session в sqlalchemy - как это работает?
  • Python - лучший язык программирования в мире.