我有以下 Django 代码正在 PostgreSQL 和 Huey(一个自动调度程序)上运行。问题是,每当运行周期性任务时,Django 都会删除表中的先前行,而不是添加到现有行中。
预定代码:
@periodic_task(crontab(minute='*/1'))
def scheduled():
team = nitrotype.Team('PR2W')
team_id = team.data["info"]["teamID"]
timestamp = datetime.datetime.now()
for members in team.data["members"]:
racer_id = members["userID"]
races = members["played"]
time = members["secs"]
typed = members["typed"]
errs = members["errs"]
rcd = RaceData(
racer_id=racer_id,
team_id=team_id,
timestamp=timestamp,
races=races,
time=time,
typed=typed,
errs=errs
)
rcd.save()
基本上,上面的代码每分钟都会运行一次。这是我开始使用的数据库 (PSQL) 数据:
nttracker=# TABLE data_racedata;
racer_id | team_id | timestamp | races | time | typed | errs
----------+---------+------------+--------+---------+----------+--------
35051013 | 765879 | 1623410530 | 4823 | 123226 | 793462 | 42975
35272676 | 765879 | 1623410530 | 8354 | 211400 | 1844434 | 38899
36690038 | 765879 | 1623410530 | 113 | 2849 | 16066 | 995
38486084 | 765879 | 1623410530 | 34448 | 903144 | 8043345 | 586297
38625235 | 765879 | 1623410530 | 108 | 2779 | 20919 | 1281
39018052 | 765879 | 1623410530 | 1908 | 48898 | 395187 | 24384
39114823 | 765879 | 1623410530 | 2441 | 64170 | 440503 | 32594
...
(50 rows)
之后,我运行 Huey,它scheduled()
每分钟执行一次。这是两分钟后我得到的结果(换句话说,两次迭代):
nttracker=# TABLE data_racedata;
racer_id | team_id | timestamp | races | time | typed | errs
----------+---------+------------+--------+---------+----------+--------
35051013 | 765879 | 1623410992 | 4823 | 123226 | 793462 | 42975
35272676 | 765879 | 1623410992 | 8354 | 211400 | 1844434 | 38899
36690038 | 765879 | 1623410992 | 113 | 2849 | 16066 | 995
38486084 | 765879 | 1623410992 | 34448 | 903144 | 8043345 | 586297
38625235 | 765879 | 1623410992 | 108 | 2779 | 20919 | 1281
39018052 | 765879 | 1623410992 | 1908 | 48898 | 395187 | 24384
39114823 | 765879 | 1623410992 | 2441 | 64170 | 440503 | 32594
...
(50 rows)
注意:大多数数据只是碰巧相同,自动执行生成的数据之间的时间戳总是不同的。
我想要 150 行而不是 50 行,因为我希望数据累积而不是替换以前的数据。谁能告诉我我哪里错了?
如果有人需要额外的日志输出,请在下面发表评论。
编辑模型
class RaceData(models.Model):
racer_id = models.IntegerField(primary_key=True)
team_id = models.IntegerField()
timestamp = UnixDateTimeField()
races = models.IntegerField()
time = models.IntegerField()
typed = models.IntegerField()
errs = models.IntegerField()
提前致谢。