A tool for converting a sqlite database into a duckdb database
Sqlite is an embedded online database designed for transactional reading and writing. Duckdb is also an embedded database, but column-oriented, designed for analytical process with a very high reading efficiency.
For more details Medium post
With uv, no installation is required. uvx downloads and runs the tool in one go:
uvx sqlite2duckdb source.db target.dbTo keep it around:
uv tool install sqlite2duckdbOr with pip:
pip install sqlite2duckdbusage: sqlite2duckdb [-f] <sqlite_path> <duckdb_path>
Convert Sqlite database to Duckdb database
positional arguments:
sqlite_path sqlite file path
duckdb_path duckdb file path
options:
-h, --help show this help message and exit
-f, --force overwrite the duckdb file if it already exists
-q, --quiet only report errors
--verbose report every step
-v, --version show program's version number and exit
uvx sqlite2duckdb source.db target.db
uvx sqlite2duckdb --force source.db target.db # overwrite target.db without askingfrom sqlite2duckdb import sqlite_to_duckdb
result = sqlite_to_duckdb("source.sqlite", "target.duckdb")
print(result.tables, result.views, result.elapsed)| Tables and data | ✅ |
| Primary keys, NOT NULL and UNIQUE constraints | ✅ |
| Indexes | ✅ |
| Views | ✅ best effort |
| FOREIGN KEY and CHECK constraints | ❌ |
A view whose SQL uses something duckdb has no equivalent for (MATCH, julianday()) is
skipped with a warning instead of failing the conversion.
FOREIGN KEY and CHECK are not copied, though not for lack of support: duckdb accepts and
enforces both in CREATE TABLE. It checks foreign keys row by row, so a self-referencing
table cannot be bulk loaded, and there is no ALTER TABLE ADD CONSTRAINT to add them once
the data is in.
The project uses uv for everything:
make dev # uv sync — installs duckdb plus the test deps (pytest, faker, ruff)
make test # uv run pytest
make lint # uv run ruff check . && uv run ruff format --check .
make build # uv build
make publish # uv publish (PyPI trusted publishing, also run on tags by CI)- Harlequin: A nice duckdb IDE for your terminal