Python timedelta-从字符串中传递'days=-5'的最优雅方式

Python timedelta-从字符串中传递'days=-5'的最优雅方式,python,Python,我正在尝试调用一个函数,该函数将触发一个报告,该报告的开始日期为一小时或几天前。下面的代码运行良好,但我想将timedelta偏移量存储在mysql数据库中 starting_date = datetime.today() - timedelta(days=-5) 我希望在数据库中存储'days=-5',将数据库列提取到变量'delta_offset'中,然后运行 starting_date = datetime.today() - timedelta(delta_offset) 它不喜欢这

我正在尝试调用一个函数,该函数将触发一个报告,该报告的开始日期为一小时或几天前。下面的代码运行良好,但我想将timedelta偏移量存储在mysql数据库中

starting_date = datetime.today() - timedelta(days=-5)
我希望在数据库中存储'days=-5',将数据库列提取到变量'delta_offset'中,然后运行

starting_date = datetime.today() - timedelta(delta_offset)
它不喜欢这样,因为delta_offset是一个字符串。我知道我可以修改函数,只在数据库中包含偏移量和store-5,如下所示。但是我真的想在数据库中存储days=-5,因为我的偏移量也可以是小时。我可以在数据库中设置偏移量始终为小时,并在数据库中存储-120,但我想知道是否有一种优雅的方法,可以在数据库中存储'days=-5',而不会导致类型问题

starting_date = datetime.today() - timedelta(days=delta_offset)
您可以将“days=-5”分为两列,分别命名为“value”和“unit”或类似内容,而不是将其作为单个列存储在数据库中。 然后,您可以将这些内容传递到字典中的timedelta并解压缩。像这样:

unit = 'days'
value = -5
starting_date = datetime.today() - timedelta(**{unit: value})
这将解压字典,以便获得与执行timedelta[unit]=value相同的结果

或者,如果您确实希望将“days=-5”保留为数据库中单个列的值,则可以在“=”上拆分字符串,然后采用类似的方法。以下是方法:

offset = 'days=-5'
unit, value = offset.split('=')
starting_date = datetime.today() - timedelta(**{unit: int(value)})

我会这样做:

    date_offset_split = date_offset.split("=")
    kwargs = {date_offset_split[0]: int(date_offset_split[1])}

    starting_date = datetime.today() - timedelta(**kwargs)

您可能应该在数据库中存储秒数或偏移量的最小单位,然后使用它来构建时间增量。您是否意识到您正在减去负偏移量,因此实际上得到的是更晚的时间?这非常有用。