mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 09:24:31 +02:00
CLI now supports upsert/insert - closes #115
This commit is contained in:
parent
8eaac7c5f1
commit
03ee97d225
3 changed files with 32 additions and 3 deletions
|
|
@ -55,6 +55,11 @@ If you want to pretty-print the output further, you can pipe it through ``python
|
|||
}
|
||||
]
|
||||
|
||||
If you execute an `UPDATE` or `INSERT` query the comand will return the number of affected rows::
|
||||
|
||||
$ sqlite-utils dogs.db "update dogs set age = 5 where name = 'Cleo'"
|
||||
[{"rows_affected": 1}]
|
||||
|
||||
You can run queries against a temporary in-memory database by passing ``:memory:`` as the filename::
|
||||
|
||||
$ sqlite-utils :memory: "select sqlite_version()"
|
||||
|
|
|
|||
|
|
@ -669,14 +669,19 @@ 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 = iter(db.conn.execute(sql))
|
||||
headers = [c[0] for c in cursor.description]
|
||||
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([c[0] for c in cursor.description])
|
||||
writer.writerow(headers)
|
||||
for row in cursor:
|
||||
writer.writerow(row)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -1107,3 +1107,22 @@ def test_drop_view_error():
|
|||
result = runner.invoke(cli.cli, ["drop-view", "test.db", "t2",],)
|
||||
assert 1 == result.exit_code
|
||||
assert 'Error: View "t2" does not exist' == result.output.strip()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"args,expected",
|
||||
[
|
||||
([], '[{"rows_affected": 1}]',),
|
||||
(["-t"], "rows_affected\n---------------\n 1"),
|
||||
],
|
||||
)
|
||||
def test_query_update(db_path, args, expected):
|
||||
db = Database(db_path)
|
||||
with db.conn:
|
||||
db["dogs"].insert_all(
|
||||
[{"id": 1, "age": 4, "name": "Cleo"},]
|
||||
)
|
||||
result = CliRunner().invoke(
|
||||
cli.cli, [db_path, "update dogs set age = 5 where name = 'Cleo'"] + args
|
||||
)
|
||||
assert expected == result.output.strip()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue