[英]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.