mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
Python CLI utility and library for manipulating SQLite databases
https://sqlite-utils.datasette.io
- Python 99.7%
- C 0.2%
Deletes all rows in the table (if it exists) before inserting new rows. SQLite doesn't implement a TRUNCATE TABLE statement but does optimize an unqualified DELETE FROM. This can be handy if you want to refresh the entire contents of a table but a) don't have a PK (so can't use --replace), b) don't want the table to disappear (even briefly) for other connections, and c) have to handle records that used to exist being deleted. Ideally the replacement of rows would appear instantaneous to other connections by putting the DELETE + INSERT in a transaction, but this is very difficult without breaking other code as the current transaction handling is inconsistent and non-systematic. There exists the possibility for the DELETE to succeed but the INSERT to fail, leaving an empty table. This is not much worse, however, than the current possibility of one chunked INSERT succeeding and being committed while the next chunked INSERT fails, leaving a partially complete operation. |
||
|---|---|---|
| docs | ||
| sqlite_utils | ||
| tests | ||
| .gitignore | ||
| .travis.yml | ||
| LICENSE | ||
| MANIFEST.in | ||
| README.md | ||
| setup.py | ||
sqlite-utils
Python CLI utility and library for manipulating SQLite databases.
Read more on my blog: sqlite-utils: a Python library and CLI tool for building SQLite databases
Installation
pip install sqlite-utils
Using as a CLI tool
Now you can do things with the CLI utility like this:
$ sqlite-utils tables dogs.db --counts
[{"table": "dogs", "count": 2}]
$ sqlite-utils dogs.db "select * from dogs"
[{"id": 1, "age": 4, "name": "Cleo"},
{"id": 2, "age": 2, "name": "Pancakes"}]
$ sqlite-utils dogs.db "select * from dogs" --csv
id,age,name
1,4,Cleo
2,2,Pancakes
$ sqlite-utils dogs.db "select * from dogs" --table
id age name
---- ----- --------
1 4 Cleo
2 2 Pancakes
You can even import data into a new database table like this:
$ curl https://api.github.com/repos/simonw/sqlite-utils/releases \
| sqlite-utils insert releases.db releases - --pk
Full CLI documentation: https://sqlite-utils.readthedocs.io/en/stable/cli.html
Using as a library
You can also import sqlite_utils and use it as a Python library like this:
import sqlite_utils
db = sqlite_utils.Database("demo_database.db")
# This line creates a "dogs" table if one does not already exist:
db["dogs"].insert_all([
{"id": 1, "age": 4, "name": "Cleo"},
{"id": 2, "age": 2, "name": "Pancakes"}
], pk="id")
Full library documentation: https://sqlite-utils.readthedocs.io/en/stable/python-api.html
Related projects
- Datasette: A tool for exploring and publishing data
- csvs-to-sqlite: Convert CSV files into a SQLite database
- db-to-sqlite: CLI tool for exporting a MySQL or PostgreSQL database as a SQLite file
- dogsheep: A family of tools for personal analytics, built on top of
sqlite-utils