我在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”来运行此程序。我收到打印消息,并且没有引发任何错误。不过,我的数据库没有改变。
我希望任务运行后,我将拥有一张完整的桌子。相反,什么都没有改变。
答案 0 :(得分:0)
看来问题出在我的迁移上。由于某种原因,heroku应用程序上的数据库对其模型具有null = True参数的列具有非null约束。