A CLI application for pulling PGN files from Chess.com and Lichess.org and saving your games into a SQLite database.
It can also be used to save PGN files from a local folder to a SQLite database.
Python 3.10 or higher is required.
It is recommended that you install this package in a virtual or isolated environment. The easiest way to do this is with uv:
uv tool install pgn_to_sqliteAlternatively, you can install it with pipx:
pipx install pgn_to_sqliteOr with pip:
pip install pgn_to_sqliteUsage: pgn-to-sqlite [OPTIONS] COMMAND [ARGS]...
  Save your chess games to a SQLite database.
  You can `fetch` your games from chess.com or lichess.org. You can also
  `save` local PGN files to the database.
Options:
  -u, --user TEXT    Your username for the chess site.
  -o, --output FILE  Where you would like your database saved.  [required]
  --help             Show this message and exit.
Commands:
  fetch  Fetch all games from the requested site.
  save   Save all PGN files from the given folder.To download, parse, and save your games, both --user and --output are required. The fetch command accepts either chess or lichess as an argument for Chess.com and Lichess.org respectively.
Example:
pgn-to-sqlite -u endlesstrax -o games.db fetch lichessNote: If you've played a lot of games, be patient—it could take a minute or two to download and process them all.
To save games from local PGN files to your database, only --output is required. The save command expects a folder path as an argument.
Example:
pgn-to-sqlite -o games.db save ./chess/games/This project uses uv for dependency management and development workflows.
- 
Install
uvif you haven't already:pip install uv
 - 
Clone the repository:
git clone https://github.com/EndlessTrax/pgn-to-sqlite.git cd pgn-to-sqlite - 
Sync dependencies and set up the virtual environment:
uv sync
 
Run the test suite with:
uv run pytestFor coverage reporting:
uv run pytest --covThis project uses Ruff for linting and formatting:
# Check for issues
uv run ruff check .
# Format code
uv run ruff format .To build the package:
uv buildContributions are welcome! Please follow these guidelines:
- 
File an issue first - Before making a PR, please file an issue so the implementation can be discussed. This saves time and increases the chances of your PR being merged without significant changes.
 - 
Lint and format your code - Use
uv run ruff check .anduv run ruff format .to ensure your code follows the project's style guidelines. - 
Include tests - Please include tests for any code changes (unless current tests already cover your contribution).
 - 
Update documentation - If your changes affect usage, please update the README accordingly.
 
This project is licensed under the MIT License - see the LICENSE file for details.
If you find this project useful and would like to show your support, you can: