Suggest --alter if column is missing, closes #259, refs #256

This commit is contained in:
Simon Willison 2021-05-18 20:26:13 -07:00
commit 2f3371ecb1
2 changed files with 25 additions and 3 deletions

View file

@ -732,9 +732,16 @@ def insert_upsert_implementation(
extra_kwargs["upsert"] = upsert
# Apply {"$base64": true, ...} decoding, if needed
docs = (decode_base64_values(doc) for doc in docs)
db[table].insert_all(
docs, pk=pk, batch_size=batch_size, alter=alter, **extra_kwargs
)
try:
db[table].insert_all(
docs, pk=pk, batch_size=batch_size, alter=alter, **extra_kwargs
)
except sqlite3.OperationalError as e:
if e.args and "has no column named" in e.args[0]:
raise click.ClickException(
"{}\n\nTry using --alter to add additional columns".format(e.args[0])
)
raise
@cli.command()

View file

@ -354,6 +354,21 @@ def test_add_column_foreign_key(db_path):
assert "table 'bobcats' does not exist" in str(result.exception)
def test_suggest_alter_if_column_missing(db_path):
db = Database(db_path)
db["authors"].insert({"id": 1, "name": "Sally"}, pk="id")
result = CliRunner().invoke(
cli.cli,
["insert", db_path, "authors", "-"],
input='{"id": 2, "name": "Barry", "age": 43}',
)
assert result.exit_code != 0
assert result.output.strip() == (
"Error: table authors has no column named age\n\n"
"Try using --alter to add additional columns"
)
def test_index_foreign_keys(db_path):
test_add_column_foreign_key(db_path)
db = Database(db_path)