Peewee value returns to its default after few seconds (BUG?)

Question:

This used to be my model:

db = SqliteDatabase(Settings.stats_conf_database_location)

class ActivityTracker(Model):
    date = DateField(unique=True)
    activity_time_curr = IntegerField(default=0)  # active seconds today
    activity_time_max = IntegerField()   # max active seconds today

    class Meta:
        database = db

I added:

blocked = BooleanField(default=False)

as a 4th parameter

and migrate code:

db.create_tables([ActivityTracker], safe=True)
# migration
table_name = ActivityTracker._meta.name
db_columns_dict = db.get_columns(table_name)
db_columns_name_list = [column.name for column in db_columns_dict]
updated_column = ActivityTracker.blocked
updated_column_name = ActivityTracker.blocked.name
if updated_column_name not in db_columns_name_list:
    migrator = SqliteMigrator(db)
    migrate(
        migrator.add_column(table_name, updated_column_name, updated_column)
    )

So far so good.
I started to something strange once I update the blocked value:

ActivityTracker.update(blocked=True).where(ActivityTracker.date == datetime.today()).execute()

enter image description here

The value gets updated:
enter image description here

ISSUE: After 10 – 30 seconds the value gets set back to 0

enter image description here

Not a single line of code is executed.
This happens over all my 600+ processes across 4 different Windows PCs.

I know also see the activity time current changed back to some old version.

ISSUE BREADCRUMBS:

        activity_tracker_obj, created = ActivityTracker.get_or_create(date=_datetime.date.today(),
                                                                   defaults={'activity_time_curr': 0,
                                                                             'activity_time_max': max_working_seconds_today,
                                                                             'blocked': False})
        InstaPyLimits.activity_tracker_obj = activity_tracker_obj  # store today pointer in db

    def update_daily_activity(time):
        #print(f'adding today time {time}')
        activity_tracker = InstaPyLimits.activity_tracker_obj
        new_time = activity_tracker.activity_time_curr + time
        activity_tracker.activity_time_curr = new_time
        activity_tracker.save()

The activity_tracker.save() in async thread is reseting it to 0, why ?
Why is it taken old value ? should I refetch it from database ?

Asked By: Si si

||

Answers:

OK ISSUES IS:
That a pointer to the database is not refreshing automatically, it pointing to local data in memory so holding old data.

Answered By: Sion Cohen
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.