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.

Reply via email to