IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Django složitější LEFT JOIN, jak na něj v ORM

V předchozím kvízu, Online test znalostí Python 2.7, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Croxo
Člen
Avatar
Croxo:15.10.2018 14:23

Ahoj, nějakou dobu se snažím přijít na to, jak níže uvedený SQL dotaz zapsat pomocí ORM modelu.. Nevím si rady jelikož se dotaz týká více než dvou tabulek (se kterými problém nemám ale netuším jak zkombinovat více než jeden LEFT JOIN)

SELECT *, HEX(event_id) as event_id, HEX(backlog_id) as backlog_id, HEX(corr_engine_ctx) as corr_engine_ctx, ki.id as kid, ki.name as kingdom, ca.name as category, ta.subcategory from alarm
             LEFT JOIN ( alarm_taxonomy ta LEFT JOIN alarm_kingdoms ki ON ta.kingdom=ki.id LEFT JOIN alarm_categories ca ON ta.category=ca.id ) ON alarm.plugin_sid=ta.sid AND alarm.corr_engine_ctx=ta.engine_id
             WHERE HEX(backlog_id)

Zkusil jsem: Pro převod binárního typu na hex jsem v modelu přidal funkci

def bin_to_hex(self):
    return binascii.hexlify(self.pk)

Vezme primary key pole backlog_id objektu v binárním typu a vrátí hex.

Vím že je možnost použít přímo SQL dotaz přes cursor, ale to není to co potřebuji.

Chci docílit: Za každý tip budu velmi vděčný, hezký den přeji.

 
Odpovědět
15.10.2018 14:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:16.10.2018 8:06

Mozna to bude uplne mimo, ale proc tam mas uvnitr tabulku s left joinu, kterou pak stejne jen lefjoinujes? To muzes joinovat najednou, ne?
http://www.dpriver.com/…qlformat.htm - typ mysql, vlozit kod, klik na format sql

SELECT *,
       Hex(event_id)        AS event_id,
       Hex(backlog_id)      AS backlog_id,
       Hex(corr_engine_ctx) AS corr_engine_ctx,
       ki.id                AS kid,
       ki.name              AS kingdom,
       ca.name              AS category,
       ta.subcategory
FROM   alarm
       LEFT JOIN ( alarm_taxonomy ta
                   LEFT JOIN alarm_kingdoms ki
                          ON ta.kingdom = ki.id
                   LEFT JOIN alarm_categories ca
                          ON ta.category = ca.id )
              ON alarm.plugin_sid = ta.sid
                 AND alarm.corr_engine_ctx = ta.engine_id
WHERE  Hex(backlog_id)

---
FROM   alarm
       LEFT JOIN alarm_taxonomy ta ON ta.sid = alarm.plugin_sid   AND ta.engine_id = alarm.corr_engine_ctx
       LEFT JOIN alarm_kingdoms ki ON ki.id = ta.kingdom
       LEFT JOIN alarm_categories ca ON ca.id =  ta.category
-- a myslim, ze ty id se zapisuji opacne
 
Nahoru Odpovědět
16.10.2018 8:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.