def bg_task(url: HttpUrl, db: Session): """这里注意一个坑,不要在后台任务的参数中db: Session = Depends(get_db)这样导入依赖""" city_data = requests.get(url=f"{url}?source=jhu&country_code=CN&timelines=false") if 200 == city_data.status_code: db.query(City).delete() # 同步数据前先清空原有的数据 for location in city_data.json()["locations"]: city = { "province": location["province"], "country": location["country"], "country_code": "CN", "country_population": location["country_population"] } crud.create_city(db=db, city=schemas.CreateCity(**city)) coronavirus_data = requests.get(url=f"{url}?source=jhu&country_code=CN&timelines=true") if 200 == coronavirus_data.status_code: db.query(Data).delete() for city in coronavirus_data.json()["locations"]: db_city = crud.get_city_by_name(db=db, name=city["province"]) for date, confirmed in city["timelines"]["confirmed"]["timeline"].items(): data = { "date": date.split("T")[0], # 把'2020-12-31T00:00:00Z' 变成 ‘2020-12-31’ "confirmed": confirmed, "deaths": city["timelines"]["deaths"]["timeline"][date], "recovered": 0 # 每个城市每天有多少人痊愈,这种数据没有 } # 这个city_id是city表中的主键ID,不是coronavirus_data数据里的ID crud.create_city_data(db=db, data=schemas.CreateData(**data), city_id=db_city.id)
def get_city(city: str, db: Session = Depends(get_db)): db_city = crud.get_city_by_name(db, name=city) if db_city is None: raise HTTPException(status_code=404, detail="City not found") return db_city
def create_data_for_city(city: str, data: schemas.CreateData, db: Session = Depends(get_db)): db_city = crud.get_city_by_name(db, name=city) data = crud.create_city_data(db=db, data=data, city_id=db_city.id) return data
def create_city(city: schemas.CreateCity, db: Session = Depends(get_db)): db_city = crud.get_city_by_name(db, name=city.province) if db_city: raise HTTPException(status_code=400, detail="City already registered") return crud.create_city(db=db, city=city)