Skip to content

Latest commit

 

History

43 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sqlite2duckdb

CI PyPI - Python Version PyPI - Downloads

A tool for converting a sqlite database into a duckdb database

Description

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

Installation

With uv, no installation is required. uvx downloads and runs the tool in one go:

uvx sqlite2duckdb source.db target.db

To keep it around:

uv tool install sqlite2duckdb

Or with pip:

pip install sqlite2duckdb

Usage

As a command line

usage: 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

Examples

uvx sqlite2duckdb source.db target.db
uvx sqlite2duckdb --force source.db target.db   # overwrite target.db without asking

From python

from sqlite2duckdb import sqlite_to_duckdb

result = sqlite_to_duckdb("source.sqlite", "target.duckdb")
print(result.tables, result.views, result.elapsed)

What is converted

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.

Contributing

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)

See also

  • Harlequin: A nice duckdb IDE for your terminal

About

Convert a SQLite database into a DuckDB database — tables, indexes and views, in one command

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages