diff --git a/sqlite_utils/cli.py b/sqlite_utils/cli.py index fe5cd64..ab77366 100644 --- a/sqlite_utils/cli.py +++ b/sqlite_utils/cli.py @@ -669,24 +669,25 @@ def drop_view(path, view): def query(path, sql, nl, arrays, csv, no_headers, table, fmt, json_cols): "Execute SQL query and return the results as JSON" db = sqlite_utils.Database(path) - cursor = db.conn.execute(sql) - if cursor.description is None: - # This was an update/insert - headers = ["rows_affected"] - cursor = [[cursor.rowcount]] - else: - headers = [c[0] for c in cursor.description] - if table: - print(tabulate.tabulate(list(cursor), headers=headers, tablefmt=fmt)) - elif csv: - writer = csv_std.writer(sys.stdout) - if not no_headers: - writer.writerow(headers) - for row in cursor: - writer.writerow(row) - else: - for line in output_rows(cursor, headers, nl, arrays, json_cols): - click.echo(line) + with db.conn: + cursor = db.conn.execute(sql) + if cursor.description is None: + # This was an update/insert + headers = ["rows_affected"] + cursor = [[cursor.rowcount]] + else: + headers = [c[0] for c in cursor.description] + if table: + print(tabulate.tabulate(list(cursor), headers=headers, tablefmt=fmt)) + elif csv: + writer = csv_std.writer(sys.stdout) + if not no_headers: + writer.writerow(headers) + for row in cursor: + writer.writerow(row) + else: + for line in output_rows(cursor, headers, nl, arrays, json_cols): + click.echo(line) @cli.command() diff --git a/tests/test_cli.py b/tests/test_cli.py index 9e43fb9..c9f4658 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1126,3 +1126,6 @@ def test_query_update(db_path, args, expected): cli.cli, [db_path, "update dogs set age = 5 where name = 'Cleo'"] + args ) assert expected == result.output.strip() + assert db.execute_returning_dicts("select * from dogs") == [ + {"id": 1, "age": 5, "name": "Cleo"}, + ]