Metadata-Version: 2.1
Name: sqlalchemy-migration-maker
Version: 0.4
Summary: SQLAlachemy migration maker.Generate SQL command to auto migrate
Home-page: https://github.com/panmpan17/MigrationMaker
Author: Michael Pan
Author-email: panmpan@gmail.com
License: UNKNOWN
Keywords: sqlalchemy migration database db postgres python python3
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: sqlalchemy

# SQLAlchemy Migration Maker
[SQLalchemy](https://github.com/zzzeek/sqlalchemy) 是個 Python 的 Database Library，可以與 Postgres、MySQL 與其他 Database 連結，但是卻缺少了更新 Database 的功能。 <br>
受到 [Django](https://github.com/django/django) Database 的啟發，我寫了這套件使更新更輕鬆，把 Database 結構化成特別的 Id，並存到資料庫，透過比較結構來決定需要下哪些 SQL 指令。<br>
**此套件需要自行設定**

[SQLalchemy](https://github.com/zzzeek/sqlalchemy) is a  python library that deal with database. Can be used to connect with Postgres, MySQL, etc. But it lack of builtin migrate functionality. <br>
Inspire by django db manager, I write this package to migrate db more easily. <br>
It turn Database structure into special id then store in database. <br>
When there's new version structure, it compares two version then decide what SQL command need to be executed. <br>
**This package need to setup yourself**

## Intall
`pip install sqlalchemy-migration-maker`

## Requiremnt
- sqlalchemy

## Testing
#### Require psycopg2
In my testing, I use postgres database to execute sql language

### Tested Envirment
- MacOSX
- Python3

### Tested Database
- Postgres

## Example
model.py

```python
from sqlalchemy import Column
from sqlalchemy.types import Integer
from sqlalchemy.ext.declarative import declarative_base


Base = declarative_base()


class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True, autoincrement=True)

    def __repr__(self):
        return f"<User {self.id} {self.create_at}>"

```

migrate.py

```python
from .model import Base
from migrationmaker import VersionControl

version_ctl = VersionCtrol("{DB_URI}")

# 檢查版本控制是否存在於 DB
# Check version ctrl exist in DB
version_ctl.check_version_ctl_exist()

# 取回舊版本
# Retrieve old version
self.version_ctl.get_latest_version(is_old_metadata=True)

# 指定新版本
# Assign new version
self.version_ctl.new_version(Base.metadata)

if not self.version_ctl.check_same():
    self.version_ctl.migrate()

```

