带有 Django 的 sqlite 真空

pin*_*awn 1 python sqlite django vacuum

在sqlite中插入和删除大量记录后,sqlite db文件的大小不断增长,有没有办法使用django真空表?

  • 一些让 sqlite 自动清空的设置
  • 或手动编写自己的 django 命令到真空

更新:

我使用sqlite数据库浏览器执行以下SQL:

vacuum [my table];
commit;
Run Code Online (Sandbox Code Playgroud)

效果很好,我只是想以编程方式进行

Sam*_*lar 5

您可以按如下方式执行原始 sql:

from django.db import connection, transaction
cursor = connection.cursor()

# Data modifying operation - commit required
cursor.execute("vacuum my_table")
transaction.commit_unless_managed()
Run Code Online (Sandbox Code Playgroud)

不过,这有点有趣http://www.sqlite.org/lang_vacuum.html/pragma.html#pragma_auto_vacuum

也许我们可以将 vacumm 设置为自动,但看起来它可能会加剧碎片化。

cursor.execute("PRAGMA auto_vacuum=FULL")
Run Code Online (Sandbox Code Playgroud)

http://www.sqlite.org/pragma.html#pragma_auto_vacuum

  • 使用 Django 1.8.3 它需要 ```transaction.commit()``` (2认同)