Python 如何检查django sqlite3数据库?

Python 如何检查django sqlite3数据库?,python,django,sqlite,Python,Django,Sqlite,我有一个使用WAL的sqlite3 django数据库。在操作中通常存在三个文件:db.sqlite3、db.sqlite3-shm、db.sqlite3-wal 为了方便地备份数据库(当服务停止时),我想创建一个管理命令来检查sqlite数据库,以便将所有更改写入db.sqlite3并删除其他两个文件 虽然sqlite3有一个,但我不知道如何从django(或)中访问它,经过大量挖掘,您可以使用pragma,因此: from django.core.management.base import

我有一个使用WAL的sqlite3 django数据库。在操作中通常存在三个文件:
db.sqlite3、db.sqlite3-shm、db.sqlite3-wal

为了方便地备份数据库(当服务停止时),我想创建一个管理命令来检查sqlite数据库,以便将所有更改写入
db.sqlite3
并删除其他两个文件


虽然sqlite3有一个,但我不知道如何从django(或)

中访问它,经过大量挖掘,您可以使用pragma,因此:

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}')
来自django.core.management.base import BaseCommand的

从django.db导入连接
类命令(BaseCommand):
help='检查数据库,更新.sqlite3并删除.sqlite3 wal和.sqlite3 shm文件'
def add_参数(self,解析器):
parser.add_参数('-cm','--checkpoint_mode',default='TRUNCATE',
选项=[“被动”、“完全”、“重新启动”、“截断”],
help='Checkpoint模式-有关选项,请参阅sqlite3文档(默认为TRUNCATE)')
def句柄(自身、*参数、**选项):
使用connection.cursor()作为游标:
execute(f“PRAGMA wal_checkpoint({options['checkpoint_mode']});”)
结果=cursor.fetchone()
打印(f'{result}')

python的最新版本支持备份api,这是复制开放数据库的唯一安全方法。您链接到了python sqlite3文档的一个非常旧的版本。请参阅。如果所有连接都已正确关闭,则最后一个连接应删除wal日志,在这种情况下,您可以正常复制数据库文件。感谢更新的链接。如果所有连接始终正确关闭;)