簡體   English   中英

如何檢查Django sqlite3數據庫?

[英]How do I checkpoint a django sqlite3 database?

我有一個正在使用WAL的sqlite3 django數據庫。 在操作中,通常存在三個文件: db.sqlite3, db.sqlite3-shm, db.sqlite3-wal

為了方便地備份數據庫(在服務停止時),我想創建一個管理命令來檢查sqlite數據庫,以便將所有更改寫入db.sqlite3並刪除其他兩個文件。

雖然sqlite3具有檢查點API ,但我不知道如何從Django(或python的sqlite3模塊 )訪問此API

經過大量挖掘后,您可以這樣使用一種編譯指示:

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}')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM