Retort is a schema migration tool for SQLAlchemy.
Project description
Retort is a schema migration tool for SQLAlchemy, compares DB schema against table metadata, and updates DB schema according to this.
It depends on the Alembic autogenerate.
Requirements
Retort works with
Python 3.3+
SQLAlchemy
Alembic
autopep8
Installation
via pip
$ pip install retort
via setup.py
$ python setup.py install
Basic Usage Examples
Generate config file (retort_config.py)
(venv) tpdn@example:~/retort_example$ retort init
Create retort_conf.py.
Edit config file
# retort_config.py
from model import user
TARGETS = [
{
'engine': user.engine, #sqlalchemy engine
'metadata': user.Base.metadata #sqlalchemy metadata
},
]
# model/user.py
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://foobar:abcdef@localhost/retort_test_db')
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(255))
fullname = Column(String(255))
xyz = Column(String(255))
Apply
(venv) tpdn@example:~/retort_example$ retort apply
====================
url: mysql+pymysql://foobar:abcdef@localhost/retort_test_db
logging_name: None
====================
op.create_table('users',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=255), nullable=True),
sa.Column('fullname', sa.String(length=255), nullable=True),
sa.Column('xyz', sa.String(length=255), nullable=True),
sa.PrimaryKeyConstraint('id')
)
Do you really want to apply this? [y/n]: y
Applying migration......
====================
url: mysql+pymysql://foobar:abcdef@localhost/retort_test_db
logging_name: None
====================
op.create_table('users',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=255), nullable=True),
sa.Column('fullname', sa.String(length=255), nullable=True),
sa.Column('xyz', sa.String(length=255), nullable=True),
sa.PrimaryKeyConstraint('id')
)
---> Processing time: 0.0894(sec)
Complete!
Update model(remove xyz column)
# model/user.py
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://foobar:abcdef@localhost/retort_test_db')
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(255))
fullname = Column(String(255))
# xyz = Column(String(255))
Apply with –sql option
(venv) tpdn@example:~/retort_example$ retort apply --sql
====================
url: mysql+pymysql://foobar:abcdef@localhost/retort_test_db
logging_name: None
====================
ALTER TABLE users DROP COLUMN xyz;
Do you really want to apply this? [y/n]: y
Applying migration......
====================
url: mysql+pymysql://foobar:abcdef@localhost/retort_test_db
logging_name: None
====================
ALTER TABLE users DROP COLUMN xyz;
---> Processing time: 0.0745(sec)
Complete!
Commands and Options
retort init retort apply --sql # print sql mode --dry-run # dry run (no database update) --yes # skip confirmation --without-drop # without drop operations (DROP TABLE, DROP COLUMN, DROP INDEX, DROP CONSTRAINT) retort print_operations --sql --without-drop
Licence
BSD License (2-Clause)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
retort-0.1.0.tar.gz
(8.1 kB
view details)
Built Distributions
retort-0.1.0-py3.5.egg
(12.3 kB
view details)
File details
Details for the file retort-0.1.0.tar.gz
.
File metadata
- Download URL: retort-0.1.0.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eba5262f8563b63e114d70ebb60ea4c452ac0c463d85614497080fc975353976 |
|
MD5 | a5275ff50067b04df28868bcc7406d56 |
|
BLAKE2b-256 | 8e05b753bef4f254d2511468818397f749e2b4520c76c189633f7933f231c630 |
File details
Details for the file retort-0.1.0-py3.5.egg
.
File metadata
- Download URL: retort-0.1.0-py3.5.egg
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19e4fb928d573c69067354c96f3a139b0c5f52da98907dd5bc5012d7c3aa0158 |
|
MD5 | 93cbde2eff4d6679df7d75fd19748518 |
|
BLAKE2b-256 | 225b3629f3126e221838f46be56e2f2b35c794252ec41ff617d619ff541620b0 |
File details
Details for the file retort-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: retort-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d280ec33c8f7421ea0cb1870b92e3f369b16639fa0188ca0bca297cb883616b6 |
|
MD5 | 2cc22a362c61e95b0bf7f8eca2207a9b |
|
BLAKE2b-256 | 22f332f8b819a6bc50a51ac999545165e45d794d876273137528b43e259a71ea |