Skip to main content

Pyway is a database versioning and migration tool inspired by Flyway

Project description

Pyway Database Version Control

Overview

Pyway is a database versioning and migration tool inspired by Flyway

Supported Databases

  • MySQLd Commercial (Version 8+)
  • MariaDB (Version 10+)
  • PostgreSQL
  • DuckDB (Version 0.10+)
  • SQLite 3

Download and Install

To install use pip:

$ pip install pyway

Or clone the repo:

$ git clone https://github.com/jasondcamp/pyway.git
$ python -m build

Configuration

Pyway environment variables and command line options

Priority is env variables -> config file -> command args

Env Variable Command Line Description Default
PYWAY_DATABASE_MIGRATION_DIR --database-migration-dir Folder name to migration files resources
PYWAY_SQL_MIGRATION_PREFIX Prefix for version in migration file V
PYWAY_SQL_MIGRATION_SEPARATOR Separator between version and description to the migration file __
PYWAY_SQL_MIGRATION_SUFFIXES Suffix extension for migration files .sql
PYWAY_TABLE --database-table Name of schema history table None
PYWAY_TYPE --database-type Data Base Management System [postgres, mysql, duckdb, sqlite ] None required
PYWAY_DATABASE_HOST --database-host Host to connect to the database None
PYWAY_DATABASE_PORT --database-port Port to connect to the database None
PYWAY_DATABASE_NAME --database-name Name of database to connect None
PYWAY_DATABASE_USERNAME --database-username User to use to connect to the database None
PYWAY_DATABASE_PASSWORD --database-password Password to use to connect to the database None
PYWAY_CONFIG_FILE -c, --config Configuration file .pyway.conf
--schema-file Used when importing a schema file
--checksum-file Used when updating a checksum - advanced use!

Configuration file

Pyway supports a configuration file with the default file as .pyway.conf. A sample config file is below:

Postgres:

database_type: postgres
database_username: postgres
database_password: 123456
database_host: localhost
database_port: 5432
database_name: postgres
database_migration_dir: schema
database_table: public.pyway

MySQL:

database_type: mysql
database_username: admin
database_password: 123456
database_host: localhost
database_port: 3306
database_name: maindb
database_migration_dir: schema
database_table: pyway

Pyway Files

Files are raw SQL files that are named like the following. Major/minor versioning and semantic versioning is supported.

V{major}_{minor}_({patch})__{description}.sql

Example: V01_01__initial_schema.sql

Example: V01_01_01__initial_schema.sql

The description needs to match the word regexp [A-Za-z0-9_]. It also supports 2 digits per version component, so 99.99.99 is the maximum version allowed.

Usage

Info

Information lets you know where you are. At first glance, you will see which migrations have already been applied, which others are still pending, and whether there is a discrepancy between the checksum of the local file and the database schema table.

$ pyway info

Validate

Validate helps you verify that the migrations applied to the database match the ones available locally. This compares the checksums to validate that what is in the migration on disk is what was committed into the database.

$ pyway validate

Migrate

After validate, it will scan the Database migration dir for available migrations. It will compare them to the migrations that have been applied to the database. If any new migration is found, it will migrate the database to close the gap.

$ pyway migrate

Import

This allows the user to import a schema file into the migration, for example if the base schema has already been applied, then the user can import that file in so they can then apply subsequent migrations. Currently the import looks in the database_migration_dir for the file.

$ pyway import --schema-file V01_01__initial_schema.sql

Checksum

Updates a checksum in the database. This is for advanced use only, as it could put the pyway database out of sync with reality. This is mainly to be used for development, where your pyway file may change because of manual applies or formatting changes. It is meant to get the database in sync with what you believe to be the current state of your system. It should NEVER be used in production, only initial development. If you require schema changes in production, create a new schema and apply that.

$ pyway checksum --checksum-file V01_01__initial_schema.sql

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyway-0.3.32.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

pyway-0.3.32-py3-none-any.whl (32.0 kB view details)

Uploaded Python 3

File details

Details for the file pyway-0.3.32.tar.gz.

File metadata

  • Download URL: pyway-0.3.32.tar.gz
  • Upload date:
  • Size: 33.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.5

File hashes

Hashes for pyway-0.3.32.tar.gz
Algorithm Hash digest
SHA256 749485c7d08844103de0a75f02dda7d2063bc01fd992f83cbf43bdcf534dfeb4
MD5 5a4c1196ca86fda85e0f9fef6b3ba58e
BLAKE2b-256 e9e9f5c6c4627789773e3109a9a5dc8e360bccc8440a4282eb70a76507ca0ae9

See more details on using hashes here.

File details

Details for the file pyway-0.3.32-py3-none-any.whl.

File metadata

  • Download URL: pyway-0.3.32-py3-none-any.whl
  • Upload date:
  • Size: 32.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.5

File hashes

Hashes for pyway-0.3.32-py3-none-any.whl
Algorithm Hash digest
SHA256 de202559599e844a7de5b71296e7058287780ac099d62c22e366bc7ea7db0949
MD5 70a67b516c744d04550f52bb68e37a56
BLAKE2b-256 cb9e71711e5f0991a83218da1fa883e4b814a1608c075f99d60b56c18a29b5de

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page