Пример #1
0
async def get_data_join_feature_by_id(
    conn: Database,
    data_model,
    feature_model,
    mp_id: int,
    require_mp_type: int,
    data_id: int,
    data_fileds: tuple,
    feature_fileds: tuple,
    session: Session = session_make(engine=None),
):
    data_model = get_shard_model(
        data_model, mp_id=mp_id, require_mp_type=require_mp_type
    )
    feature_model = get_shard_model(
        feature_model, mp_id=mp_id, require_mp_type=require_mp_type
    )
    feature_attr = []
    for feature in feature_fileds:
        feature_attr.append(getattr(feature_model, feature))
    data_attr = []
    for data in data_fileds:
        data_attr.append(getattr(data_model, data))
    query = (
        session.query(*tuple(data_attr), *tuple(feature_attr))
        .select_from(data_model)
        .join(feature_model, feature_model.data_id == data_model.id)
        .filter(data_model.id == data_id)
    )
    return await conn.fetch_one(query2sql(query))
Пример #2
0
async def get_by_id(
    conn: Database,
    orm_model,
    mp_id: int,
    require_mp_type: int,
    data_id: int,
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)
    query = session.query(model).filter(model.id == data_id)
    return await conn.fetch_one(query2sql(query))
Пример #3
0
async def get_latest(
    conn: Database,
    orm_model,
    mp_id: int,
    require_mp_type: int,
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)
    query = (
        session.query(model).order_by(model.id.desc()).limit(1)
    )  # query all the defined fields
    return await conn.fetch_one(query2sql(query))
Пример #4
0
async def get_multi(
    conn: Database,
    mp_id: int,
    require_mp_type: int,
    orm_model,
    fileds: List[str],
    time_before: str,
    time_after: str,
    limit: int,
    with_estimated: bool = False,
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)

    query = session.query(model)
    for filed in fileds + ["id", "time", "data_id"]:
        query = query.options(load_only(filed))

    if with_estimated:
        for filed in fileds:
            query = (
                query.options(load_only("est_" + filed))
                if filed != "similarity"
                else query
            )

    if time_before != "None":
        query = query.filter(model.time.between(str(time_after), str(time_before)))
        query = query.order_by(model.time.desc())

    if limit:
        query = query.order_by(model.time.desc()).limit(limit)
    res = await conn.fetch_all(query2sql(query))
    res.reverse()
    if len(res) == 0:
        raise HTTPException(
            status_code=400, detail="No signal collected between the time range"
        )

    dic = {}
    keys = res[0].keys()
    for row in res:
        for key in keys:
            if key == "time":
                dic.setdefault(key, []).append(str(row[key]))
            else:
                dic.setdefault(key, []).append(row[key])
    return dic
Пример #5
0
async def get_multi(
    conn: Database,
    orm_model,
    mp_id: int,
    require_mp_type: int,
    time_before: datetime,
    time_after: datetime,
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)
    query = (
        session.query(model.id, model.time)
        .filter(model.time.between(str(time_before), str(time_after)))
        .order_by(model.id)
    )
    return await conn.fetch_all(query2sql(query))
Пример #6
0
async def get_latest(
    conn: Database,
    mp_id: int,
    require_mp_type: int,
    orm_model,
    fileds: List[str],
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)

    query = session.query(model)
    for filed in fileds:
        query = query.options(load_only(filed))
    query = query.order_by(model.id.desc()).limit(1)

    res = await conn.fetch_one(query2sql(query))
    return res
Пример #7
0
async def get(
    conn: Database,
    mp_id: int,
    require_mp_type: int,
    orm_model,
    fileds: List[str],
    data_id: int,
    session: Session = session_make(engine=None),
):
    model = get_shard_model(orm_model, mp_id=mp_id, require_mp_type=require_mp_type)

    query = session.query(model)
    for filed in fileds + ["id", "time"]:
        query = query.options(load_only(filed))
    query = query.filter(model.data_id == data_id)

    res = await conn.fetch_one(query2sql(query))
    return res