Возвращает ноль, где значения не существуют в SQLAlchemy (Python) - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть 3 таблицы

  • tblOffers (tsin, offerId)
  • tblProducts (tsin)
  • tblThresholds (offerId)

Я пытаюсь сделать выборку по столбцам из всех 3 таблиц. Дело в том, что в tblThresholds может не быть записи, которая соответствует offerId. В этом случае мне все еще нужна информация из двух других таблиц для возврата ... Я не против, если пропущенные столбцы или поля равны нулю или что-то еще в ответе. В настоящее время я ничего не получаю, если в tblThresholds нет информации, которая правильно соответствует offerId.

Я подозреваю, что проблема связана с тем, как я выполняю присоединение, но я ' Я не очень опытный с SQL и совершенно новым для SQLAlchemy. (Кстати, используя MySQL)

query = db.select([
    tblOffers.c.title,
    tblOffers.c.currentPrice,
    tblOffers.c.rrp,
    tblOffers.c.offerId,
    tblOffers.c.gtin,
    tblOffers.c.status,
    tblOffers.c.mpBarcode,
    tblThresholds.c.minPrice,
    tblThresholds.c.maxPrice,
    tblThresholds.c.increment,
    tblProducts.c.currentSellerId,
    tblProducts.c.brand,
    tblOffers.c.productTakealotURL,
    tblOffers.c.productLineId
]).select_from(
    tblOffers.
    join(tblProducts, tblProducts.c.tsin == tblOffers.c.tsinId).
    join(tblThresholds, tblThresholds.c.offerId == tblOffers.c.offerId)
)

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

Спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

Попробуйте часами -> спросите здесь -> найдите ответ минутами самостоятельно ?‍♂️

Так что для тех, кто может оказаться здесь по той же причине, что и я, здесь вы go.

Оказывается, SQLAlchemy выполняет правильное соединение по умолчанию (из того, что я могу сказать - , пожалуйста, исправьте меня, если я ошибаюсь ). Я добавил isouter=True к своему соединению на tblThresholds, и это сработало!

Ссылка на информацию в документах: https://docs.sqlalchemy.org/en/13/orm/query.html?highlight=join#sqlalchemy .orm.query.Query.join.params.isouter

Окончательный код:

query = db.select([
    tblOffers.c.title,
    tblOffers.c.currentPrice,
    tblOffers.c.rrp,
    tblOffers.c.offerId,
    tblOffers.c.gtin,
    tblOffers.c.status,
    tblOffers.c.mpBarcode,
    tblThresholds.c.minPrice,
    tblThresholds.c.maxPrice,
    tblThresholds.c.increment,
    tblProducts.c.brand,
    tblOffers.c.productTakealotURL,
    tblOffers.c.productLineId
]).select_from(
    tblOffers.
    join(tblProducts, tblProducts.c.tsin == tblOffers.c.tsinId).
    join(tblThresholds, tblThresholds.c.offerId == tblOffers.c.offerId, isouter=True)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...