256
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 27. 06. 2021, 20:59:20 »Jakmile programátor použije cyklus (protože je tak zvyklý a dobře se mu tak uvažuje a pracuje), tak těžko už ORM může převést tuto operaci na hromadný SQL příkaz.
to podle me v modernim SQL moc nepotrebujete, jde to nahradit window funkcemi
treba ten vas priklad s okresy bych v peeewee napsal nejak tak
Kód: [Vybrat]
class City(Model):
district = IntegerField()
inhabitants = IntegerField()
CityAlias = City.alias()
subquery = (CityAlias
.select(
CityAlias.district,
CityAlias.inhabitants,
fn.ROW_NUMBER().over(
partition_by=[CityAlias.district],
order_by=[CityAlias.inhabitants.desc()]).alias('rn')))
query = (City.select(subquery.c.district, subquery.c.inhabitants).from_(subquery).where(subquery.c.rn <= 10))
print(query)
vygeneruje takove SQL
Kód: [Vybrat]
SELECT `t1`.`district`,
`t1`.`inhabitants`
FROM (
SELECT `t2`.`district`,
`t2`.`inhabitants`,
ROW_NUMBER() OVER (PARTITION BY `t2`.`district` ORDER BY `t2`.`inhabitants` DESC) AS `rn`
FROM `city` AS `t2`) AS `t1`
WHERE (
`t1`.`rn` <= 10)
kdybych do toho zacal pridavat nejake joiny, tak ten ORM kod bude kratsi nez generovane SQL, navic si v ORM mohu napsat obecne funkce na vytvareni podobnych dotazu