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 при изменении дочерних изменений
  • Как сохранить request.form в db через wtforms или ошибку в sqlalchemy update?
  • Обновление SQLAlchemy, если существует уникальный ключ
  • Почему в Windows 7 вставка и удаление более чем в 100 раз больше, чем Mac 10.9?
  • Использование pyodbc вызывает ошибку: имя источника данных не найдено, и драйвер по умолчанию не указан
  • Массовые вставки с помощью Flask-SQLAlchemy
  • Начальный вопрос об объявлении стиля SQLAlchemy ()
  •  
    Interesting Posts for Van-Lav

    Loop печатает через два списка, чтобы получить два столбца с фиксированным (настраиваемым набором) пробелом между первой буквой каждого элемента каждого списка

    Pygame – есть ли способ только blit или update в маске

    Как регистрировать события на дочерних виджетах tkinter?

    WrapSize и полоса прокрутки: виджеты, не нарисованные при запуске, не будут рисоваться позже

    Собирающие данные (график рассеяния) в python?

    Сохранить список упорядоченных кортежей как CSV

    Сохраненные процедуры в Python для PostgreSQL

    Использование python scipy для соответствия гамма-распределению данных

    тестовая колба sql alchemy

    Python импортирует модули src при выполнении тестов

    Как захватить числа в середине строки? (Python)

    uwsgi + Flask + virtualenv ImportError: нет модуля с именем site

    Rendering Plaintext как HTML, поддерживающий пробел – без <pre>

    Django TemplateSyntaxError Не удалось проанализировать остаток: '()'

    Более чистый способ итерации в словаре на python, чтобы избежать многих вложенных циклов

    Python - лучший язык программирования в мире.