我正在尝试调用一个函数,该函数会触发以小时或几天前的开始日期生成报告。下面的代码工作正常,但我想将timedelta偏移量存储在mysql数据库中。
starting_date = datetime.today() - timedelta(days=-5)
我希望将'days = -5'存储在数据库中,将该数据库列提取到变量'delta_offset'中,然后运行
starting_date = datetime.today() - timedelta(delta_offset)
它不喜欢这样,因为delta_offset是一个字符串。我知道我可以修改函数以仅在数据库中包含offset并存储-5,如下所示。但是我真的想在数据库中存储days = -5,因为我的偏移量也可以是几小时。我可以使数据库中的偏移量始终为小时,并在数据库中存储-120,但是我想知道是否存在一种优雅的方式在数据库中存储“ days = -5”而不会导致类型问题
starting_date = datetime.today() - timedelta(days=delta_offset)
答案 0 :(得分:1)
您可以将'days=-5'
分为两列,分别是“值”和“单位”或类似的列,而不是将unit = 'days'
value = -5
starting_date = datetime.today() - timedelta(**{unit: value})
存储在数据库中。
然后,您可以将它们通过字典传递给timedelta并解压缩。像这样:
timedelta([unit]=value)
这将解压缩字典,因此您得到的结果与'days=-5'
相同。
或者,如果您确实想将'='
保留为数据库中单个列的值,则可以在offset = 'days=-5'
unit, value = offset.split('=')
starting_date = datetime.today() - timedelta(**{unit: int(value)})
上拆分字符串,然后采取类似的方法。方法如下:
yarn.lock
答案 1 :(得分:0)
我会这样:
date_offset_split = date_offset.split("=")
kwargs = {date_offset_split[0]: int(date_offset_split[1])}
starting_date = datetime.today() - timedelta(**kwargs)