Added vacuum to CLI and Python API

This commit is contained in:
Simon Willison 2019-01-24 19:39:04 -08:00
commit 231224ba1a
6 changed files with 40 additions and 0 deletions

View file

@ -15,3 +15,10 @@ You can list the names of tables in a database using the ``table_names`` subcomm
dogs
cats
chickens
Vacuum
======
You can run VACUUM to optimize your database like so::
$ sqlite-utils vacuum mydb.db

View file

@ -313,3 +313,12 @@ By default the index will be named ``idx_{table-name}_{columns}`` - if you want
["is_good_dog", "age"],
index_name="good_dogs_by_age"
)
Vacuum
======
You can optimize your database by running VACUUM against it like so:
.. code-block:: python
Database("my_database.py").vacuum()

View file

@ -20,3 +20,14 @@ def table_names(path):
db = sqlite_utils.Database(path)
for name in db.table_names:
print(name)
@cli.command()
@click.argument(
"path",
type=click.Path(exists=True, file_okay=True, dir_okay=False, allow_dash=False),
required=True,
)
def vacuum(path):
"""Run VACUUM against the database"""
sqlite_utils.Database(path).vacuum()

View file

@ -98,6 +98,9 @@ class Database:
)
)
def vacuum(self):
self.conn.execute("VACUUM;")
class Table:
def __init__(self, db, name):

View file

@ -21,3 +21,8 @@ def db_path(tmpdir):
def test_table_names(db_path):
result = CliRunner().invoke(cli.cli, ["table_names", db_path])
assert "Gosh\nGosh2" == result.output.strip()
def test_vacuum(db_path):
result = CliRunner().invoke(cli.cli, ["vacuum", db_path])
assert 0 == result.exit_code

View file

@ -176,3 +176,8 @@ def test_create_view(fresh_db):
fresh_db.create_view("bar", "select bar from data")
rows = fresh_db.conn.execute("select * from bar").fetchall()
assert [("bar",)] == rows
def test_vacuum(fresh_db):
fresh_db["data"].insert({"foo": "foo", "bar": "bar"})
fresh_db.vacuum()