Подзапрос SQLalchemy со временем - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть координаты некоторых людей, и я пытаюсь построить контактную сеть. 2 человека вступают в контакт, если они находятся в одной и той же части пространства и в одно и то же время не менее двух раз. Для этого я определил свою таблицу следующим образом:

class Demo_data(Base):
        __tablename__ = "cleaned_data"
        n=Column(String)
        adv_id = Column(String)
        dt = Column(DateTime)
        geo= Column(String, primary_key=True)
        lat=Column(Float)
        long=Column(Float)

Я беру выборку людей, использующих подзапрос:

t=sess.query(Demo_data).options(load_only('adv_id','dt','geo','lat','long')).filter(Demo_data.adv_id.in_([i for i in Mysample]).subquery('t')

, а затем использую этот подзапрос в запросе:

neighbours= sess.execute(sess.query(Demo_data)
                             .options(load_only('adv_id'))
                             .filter(and_(Demo_data.geo == t.c.geo,
                             Demo_data.dt.between(t.c.dt- _time,t.c.dt +_time))

, где я определяю _time=timedelta(x minutes). Эта фильтрация постоянно возвращается к 0. Я пытался фильтровать в пространстве, например, используя .long и .lat, и это работает. Но не этот со временем.

Я обнаружил, что проблема в определении _time. Несмотря на то, что я объявляю x минут, эти x минут каким-то образом преобразуются в время эпохи, начиная с 1-1-1970. Поэтому t. c .dt-_time соответствует, например, 2-2-2020 - 1-1-1990, и это вызывает проблему. Однако это единственный способ указать дельту в качестве входных данных. Я пробовал также addtime и другие функции, но в итоге они сталкиваются с той же проблемой.

...