fixing ann_filters function
This commit is contained in:
parent
2c870ee983
commit
f744cce713
@ -1,4 +1,5 @@
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
from sqlalchemy.sql import text, literal_column
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
@ -48,18 +49,45 @@ async def add_poems_to_db(async_db: AsyncSession):
|
|||||||
|
|
||||||
async def filter_ann(schema: pydantic_schemas.SortAnnouncements, db: AsyncSession):
|
async def filter_ann(schema: pydantic_schemas.SortAnnouncements, db: AsyncSession):
|
||||||
"""Функция для последовательного применения различных фильтров (через схему SortAnnouncements)"""
|
"""Функция для последовательного применения различных фильтров (через схему SortAnnouncements)"""
|
||||||
res = await db.execute(select(orm_models.Announcement))
|
# fields = schema.__dict__ # параметры передоваемой схемы SortAnnouncements (ключи и значения)
|
||||||
res = res.fetchall()
|
# # проходим по названиям фильтров и их значениям
|
||||||
fields = schema.__dict__ # параметры передоваемой схемы SortAnnouncements (ключи и значения)
|
# for name, filt_val in fields.items():
|
||||||
# проходим по названиям фильтров и их значениям
|
# # создаем выражение sql запроса
|
||||||
for name, filt in fields.items():
|
# statement = text("SELECT * FROM announcements ")
|
||||||
# если фильтр задан
|
# # выбираем все строки
|
||||||
if filt is not None:
|
# query = await db.execute(statement)
|
||||||
d = {name: filt}
|
# res = query.all()
|
||||||
# фильтруем
|
# # если фильтр задан
|
||||||
res = await res.filter_by(**d)
|
# if filt_val is not None:
|
||||||
|
# to_intersect_query = await db.execute(select(orm_models.Announcement).where(literal_column(f"announcements.{name}") == filt_val))
|
||||||
|
# to_intersect = to_intersect_query.all()
|
||||||
|
# res = res.intersect(to_intersect)
|
||||||
|
|
||||||
|
# отфильтровываем подходящие объявления
|
||||||
|
res = await db.execute(select(orm_models.Announcement)
|
||||||
|
.where(schema.obsolete != None and orm_models.Announcement.obsolete == schema.obsolete
|
||||||
|
and schema.user_id != None and orm_models.Announcement.user_id == schema.user_id
|
||||||
|
and schema.metro != None and orm_models.Announcement.metro == schema.metro
|
||||||
|
and )
|
||||||
|
# .where(schema.user_id != None and orm_models.Announcement.user_id == schema.user_id)
|
||||||
|
# .where(schema.metro != None and orm_models.Announcement.metro == schema.metro)
|
||||||
|
# .where(schema.category != None and orm_models.Announcement.category == schema.category)
|
||||||
|
)
|
||||||
|
# statement = text("SELECT * FROM announcements "
|
||||||
|
# "WHERE announcements.obsolete = :obsolete "
|
||||||
|
# "AND announcements.user_id == :user_id "
|
||||||
|
# "AND announcements.metro == :metro "
|
||||||
|
# "AND announcements.category == :category")
|
||||||
|
|
||||||
|
# res = await db.execute(statement,
|
||||||
|
# {"obsolete": schema.obsolete,
|
||||||
|
# "user_id": schema.user_id,
|
||||||
|
# "metro": schema.metro,
|
||||||
|
# "category": schema.category}
|
||||||
|
# )
|
||||||
# возвращаем все подходящие объявления
|
# возвращаем все подходящие объявления
|
||||||
await res.all()
|
|
||||||
|
return res.scalars().all()
|
||||||
|
|
||||||
|
|
||||||
async def check_obsolete(db: AsyncSession, current_date: datetime.date):
|
async def check_obsolete(db: AsyncSession, current_date: datetime.date):
|
||||||
@ -67,7 +95,8 @@ async def check_obsolete(db: AsyncSession, current_date: datetime.date):
|
|||||||
Функция участвует в процессе обновления поля obsolete у всех объявлений раз в сутки
|
Функция участвует в процессе обновления поля obsolete у всех объявлений раз в сутки
|
||||||
"""
|
"""
|
||||||
# обращаемся ко всем объявлениям бд
|
# обращаемся ко всем объявлениям бд
|
||||||
announcements = await db.execute(select(orm_models.Announcement)).scalars().all()
|
query_announcements = await db.execute(select(orm_models.Announcement))
|
||||||
|
announcements = query_announcements.scalars().all()
|
||||||
# для каждого объявления
|
# для каждого объявления
|
||||||
for ann in announcements:
|
for ann in announcements:
|
||||||
# если просрочено
|
# если просрочено
|
||||||
|
Loading…
x
Reference in New Issue
Block a user