Skip to content

Commit 8314cfb

Browse files
committed
changed back to sql query
1 parent de33abf commit 8314cfb

1 file changed

Lines changed: 29 additions & 55 deletions

File tree

app/services/tree.py

Lines changed: 29 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -14,61 +14,35 @@ async def get_tree_by_id(session: AsyncSession, tree_id: int):
1414
return row
1515

1616
async def get_tree_by_species(session: AsyncSession):
17-
# Alias for subquery
18-
gef = aliased(StreetTreeRegister)
19-
20-
stmt = (
21-
select(
22-
StreetTreeRegister.id,
23-
StreetTreeRegister.tree_number,
24-
StreetTreeRegister.street,
25-
StreetTreeRegister.species,
26-
StreetTreeRegister.type,
27-
func.round(
28-
func.ST_X(func.ST_Transform(StreetTreeRegister.geom, 4326)).cast('numeric'),
29-
6
30-
).label("lon"),
31-
func.round(
32-
func.ST_Y(func.ST_Transform(StreetTreeRegister.geom, 4326)).cast('numeric'),
33-
6
34-
).label("lat"),
35-
case(
36-
(
37-
StreetTreeRegister.species.ilike("%Tilia%"), 1,
38-
),
39-
(
40-
StreetTreeRegister.species.ilike("%Acer%"), 2,
41-
),
42-
(
43-
StreetTreeRegister.species.ilike("%Quercus%"), 3,
44-
),
45-
(
46-
StreetTreeRegister.species.ilike("%Fagus%"), 4,
47-
),
48-
(
49-
StreetTreeRegister.species.ilike("%Betula%"), 5,
50-
),
51-
(
52-
StreetTreeRegister.species.ilike("%Carpinus%"), 6,
53-
),
54-
else_=0,
55-
).label("species_index")
56-
)
57-
.where(
58-
StreetTreeRegister.type == 'bestand',
59-
not_(
60-
exists()
61-
.where(
62-
and_(
63-
gef.type == 'gefaellt',
64-
gef.tree_number == StreetTreeRegister.tree_number,
65-
gef.street == StreetTreeRegister.street,
66-
)
67-
)
68-
)
69-
)
70-
.order_by(StreetTreeRegister.species)
71-
)
17+
stmt = text('''
18+
SELECT
19+
tr.id,
20+
tr.tree_number,
21+
tr.street,
22+
tr.species,
23+
tr.type,
24+
ROUND(ST_X(ST_Transform(tr.geom, 4326))::numeric, 6) AS lon,
25+
ROUND(ST_Y(ST_Transform(tr.geom, 4326))::numeric, 6) AS lat,
26+
CASE
27+
WHEN tr.species ILIKE '%Tilia%' THEN 1
28+
WHEN tr.species ILIKE '%Acer%' THEN 2
29+
WHEN tr.species ILIKE '%Quercus%' THEN 3
30+
WHEN tr.species ILIKE '%Fagus%' THEN 4
31+
WHEN tr.species ILIKE '%Betula%' THEN 5
32+
WHEN tr.species ILIKE '%Carpinus%' THEN 6
33+
ELSE 0
34+
END AS species_index
35+
FROM flensburg.street_tree_register tr
36+
WHERE tr.type = 'bestand'
37+
AND NOT EXISTS (
38+
SELECT 1
39+
FROM flensburg.street_tree_register gef
40+
WHERE gef.type = 'gefaellt'
41+
AND gef.tree_number = tr.tree_number
42+
AND gef.street = tr.street
43+
)
44+
ORDER BY tr.species
45+
''')
7246

7347
result = await session.execute(stmt)
7448
rows = result.mappings().all()

0 commit comments

Comments
 (0)