Записи базы данных, добавленные в фоновое задание, не отображаются на герою - PullRequest
0 голосов
/ 21 мая 2019

У меня есть фоновая задача в моем приложении django, которое вводит все строки из CSV в одну из таблиц в моей базе данных. Я передаю csv через сайт администратора, который создает фоновую задачу, которую я могу запустить с python manage.py process_tasks. Это все работает локально, но в моем приложении heroku, по некоторым причинам, это не так.

Я подумал, что ввод данных с консоли heroku невозможен, но если я запускаю python manage.py shell на консоли heroku, я могу нормально вводить данные.

Это код, который вводит данные в базу данных:

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 голосов
/ 21 мая 2019

Кажется, проблема была в моих миграциях.По какой-то причине база данных в приложении heroku имеет ненулевое ограничение для столбца, модель которого имеет аргумент null = True.

...