【问题标题】:Database entries added in background task don't show up on heroku在后台任务中添加的数据库条目不会显示在 heroku 上
【发布时间】:2019-05-21 14:50:17
【问题描述】:

我的 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”来运行它。我收到打印消息,没有抛出错误。不过,我的数据库没有改变。

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

【问题讨论】:

    标签: django postgresql heroku background-task


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多