在后台任务中添加的数据库条目不会显示在heroku上

时间:2019-05-21 14:50:17

标签: django postgresql heroku background-task

我在django应用程序中有一个后台任务,该任务将csv中的所有行输入数据库中的一个表中。我通过管理站点传递了csv,该站点创建了一个可以使用python manage.py process_tasks运行的后台任务。所有这些都可以在本地运行,但是在我的heroku应用上,由于某种原因,它不能运行。

我认为可能无法从heroku控制台输入数据,但是如果我在heroku控制台上运行python manage.py shell,则可以输入数据。

这是将数据输入数据库的代码:

from background_task import background

...

@background(schedule=5)
def save_course_from_df(df):
    df = pandas.read_json(df)
    db = 0
    for index, row in df.iterrows():
        print("%s percent done!" % str(db / df.shape[0]))
        db += 1
        values = dict(row)
        values = {key: values[key] for key in values.keys()
                  if type(values[key]) != float or not math.isnan(values[key])}
        try:
            Course.objects.update_or_create(
                url=row['url'],
                defaults=values
            )
        except IntegrityError:
            pass
    print('done!')

我通过打开heroku控制台并运行“ python manage.py process_tasks”来运行此程序。我收到打印消息,并且没有引发任何错误。不过,我的数据库没有改变。

我希望任务运行后,我将拥有一张完整的桌子。相反,什么都没有改变。

1 个答案:

答案 0 :(得分:0)

看来问题出在我的迁移上。由于某种原因,heroku应用程序上的数据库对其模型具有null = True参数的列具有非null约束。