First CLI command: sqlite-utils table_names test.db

This commit is contained in:
Simon Willison 2019-01-24 19:30:47 -08:00
commit fd5829b27d
4 changed files with 60 additions and 3 deletions

17
docs/cli.rst Normal file
View file

@ -0,0 +1,17 @@
.. _python_api:
================================
sqlite-utils command-line tool
================================
The ``sqlite-utils`` command-line tool can be used to manipulate SQLite databases in a number of different ways.
Listing tables
==============
You can list the names of tables in a database using the ``table_names`` subcommand::
$ sqlite-utils table_names mydb.db
dogs
cats
chickens

View file

@ -17,6 +17,7 @@ Contents
:maxdepth: 2
python-api
cli
changelog
Take a look at `this script <https://github.com/simonw/russian-ira-facebook-ads-datasette/blob/master/fetch_and_build_russian_ads.py>`_ for an example of this library in action.

View file

@ -1,6 +1,22 @@
import click
import sqlite_utils
@click.command()
def cli(*args):
click.echo(repr(args))
@click.group()
@click.version_option()
def cli():
"Commands for interacting with a SQLite database"
pass
@cli.command()
@click.argument(
"path",
type=click.Path(exists=True, file_okay=True, dir_okay=False, allow_dash=False),
required=True,
)
def table_names(path):
"""List the tables in the database"""
db = sqlite_utils.Database(path)
for name in db.table_names:
print(name)

23
tests/test_cli.py Normal file
View file

@ -0,0 +1,23 @@
from sqlite_utils import cli
from click.testing import CliRunner
import pytest
import sqlite3
CREATE_TABLES = """
create table Gosh (c1 text, c2 text, c3 text);
create table Gosh2 (c1 text, c2 text, c3 text);
"""
@pytest.fixture
def db_path(tmpdir):
path = str(tmpdir / "test.db")
db = sqlite3.connect(path)
db.executescript(CREATE_TABLES)
return path
def test_table_names(db_path):
result = CliRunner().invoke(cli.cli, ["table_names", db_path])
assert "Gosh\nGosh2" == result.output.strip()