Ahoj, 1) opravdu všichni pro výběr dat z databáze používáte Django ORM ?
já teda nejsem Djangista, ale co jsem tak vypozoroval, tak Django ORM je základní abstrakce pro data store a business logiku, díky tomu funguje integrace s pluginy, adminem a tak. Když vezmeš Django a odečteš ORM a cokoliv, co na ORM nějak navazuje, tak ti zbyde Flask :) Takže potom by vlastně Django nedávalo žádnou přidanou hodnotu a z toho bych usoudil, že 99,9% Django vývojářů bude používat ORM :) V kontextu tohohle je psaní vlastních SQL příkazů asi něco jako programovat v C, když můžu to samé naprogramovat v Pythonu. Ale i to je někdy potřeba. SELECT ... ORDER BY id DESC LIMIT 1 > což je pomalejší a obecně o něco horší možnost ? Z čeho tak usuzuješ? Nevím o ničem rychlejším, než vlézt do id indexu, podívat se na poslední prvek (předpokládám, že ten index je seřazený), a fetchnout záznam, na který ten poslední prvek odkazuje. Nebo aspoň to si představuju, že SQL databáze udělá. Aspoň teda NoSQL databáze to tak dělají :) K debugování SQL dotazů apod. bych rád zmínil, že je fajn monitorovat aplikaci "zvenčí" - zapnout slow log v databázi, monitorovat pomalé requesty (např. nginx může do access logu uvádět celkovou dobu trvání requestu). Blackbox přístup mi tady přijde obecně robustnější než whitebox. Možná by bylo zajímavé v dev a staging prostředí uměle zvýšit latenci mezi appkou a databází, protože každá prasárna fungovala dobře, když běžela u vývojáře na localhostu :) Nebo přidat do testů nějaký middleware, který bude hlídat metriky okolo SQL dotazů. Nevýhoda byla, že musím myslet na escapování vstupů a poté musím mapovat > výsledné pole na entitu. Toho bych se rád z časových důvodů zbavil. Jsi programátor. Když na něco musíš myslet, tak to znamená, že sis na to nenapsal pomocnou funkci, nebo máš špatnou abstrakci. Petr Messner út 14. 8. 2018 v 10:59 odesílatel PavelZet <[email protected]> napsal: > Ahoj, chci se zeptat, zda > SELECT ... WHERE id = max(id) > jak ji dosáhnu? > zkoušel sem .filter(id=Max(id)), který ale použije pomalejší HAVING místo > optimálního WHERE > SELECT ... HAVING id = max(id) > 4) proč všichni používají zápis .latest() (resp. .order_by(id)[:1].get()), > který srovná celou tabulku a vybere poslední prvek formou > SELECT ... ORDER BY id DESC LIMIT 1 > což je pomalejší a obecně o něco horší možnost ? > 5) existuje nějaký dobrý tutoriál z pohledu SQL, kde jasně uvidím jak psát > ORM formu, abych dosáhl konkrétního SQL ? > 6) napíšu v ORM obecně jakkoli zamotaný SQL dotaz? nebo sou věci které > prostě nejdou? > 7) jsou případy na které se Django ORM vyloženě nehodí a musí se použít > náhradní řešení ? > > Jsem zvyklý si optimalizované SQL dotazy psát sám. Samotný dotaz mám > napsaný rychle. > Nevýhoda byla, že musím myslet na escapování vstupů a poté musím mapovat > výsledné pole na entitu. Toho bych se rád z časových důvodů zbavil. > Na to se hodí ORM. > > V ORM řešení mám vše napsané rychle a funkčně, to je fajn a jeví se dobře. > ALE poté musím dotazy ještě debugovat, googlit a editovat tak, aby vznikl > optimální SQL dotaz, jaký si představuju. Takže časová úspora je zase tatam > :( > > Díky za reakce znalých. > > -- > -- > E-mailová skupina [email protected] > Správa: http://groups.google.cz/group/django-cs > --- > Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny > „django-cs“ ve Skupinách Google. > Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, > zašlete e-mail na adresu [email protected]. > Chcete-li tuto diskusi zobrazit na webu, navštivte > https://groups.google.com/d/msgid/django-cs/879de872-c7c6-4aad-b00f-d9a9a58f6ae9%40googlegroups.com > <https://groups.google.com/d/msgid/django-cs/879de872-c7c6-4aad-b00f-d9a9a58f6ae9%40googlegroups.com?utm_medium=email&utm_source=footer> > . > Další možnosti najdete na https://groups.google.com/d/optout. > -- -- E-mailová skupina [email protected] Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu [email protected]. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/CAK9Q5BQ_dMha5vq66WG751SEa_BRUN8J-kaPuy2UivVWXdj_Vg%40mail.gmail.com. Další možnosti najdete na adrese https://groups.google.com/d/optout.
