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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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: Egg
- 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
|