Как проверить контрольную точку базы данных django sqlite3? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть база данных sqlite3 django, использующая WAL.В работе обычно присутствуют три файла: db.sqlite3, db.sqlite3-shm, db.sqlite3-wal.

Для удобства резервного копирования базы данных (когда служба остановлена), я хотел бы создать команду управления для контрольной точки базы данных sqlite, чтобызапишите все изменения в db.sqlite3 и удалите два других файла.

Хотя sqlite3 имеет API контрольной точки , я не знаю, как получить к нему доступ из django (или модуль sqlite3 для Python )

1 Ответ

0 голосов
/ 21 февраля 2019

После долгих копаний вы можете использовать прагму таким образом:

from django.core.management.base import BaseCommand
from django.db import connection


class Command(BaseCommand):
    help = 'Checkpoint the database, updating <db>.sqlite3 and removing <db>.sqlite3-wal and <db>.sqlite3-shm files'

    def add_arguments(self, parser):
        parser.add_argument('-cm', '--checkpoint_mode', default='TRUNCATE',
                            choices=['PASSIVE', 'FULL', 'RESTART', 'TRUNCATE'],
                            help='Checkpoint mode - See sqlite3 documentation for options (default is TRUNCATE)')

    def handle(self, *args, **options):
        with connection.cursor() as cursor:
            cursor.execute(f"PRAGMA wal_checkpoint({options['checkpoint_mode']});")
            result = cursor.fetchone()
        print(f'{result}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...