An open API service indexing awesome lists of open source software.

https://github.com/twtrubiks/flask-migrate-tutorial

透過 Flask-Migrate-Tutorial 管理資料庫 (database)
https://github.com/twtrubiks/flask-migrate-tutorial

database flask migrate mssql mysql postgresql python sqlite tutorial

Last synced: 10 months ago
JSON representation

透過 Flask-Migrate-Tutorial 管理資料庫 (database)

Awesome Lists containing this project

README

          

# Flask-Migrate-Tutorial
透過 Flask-Migrate-Tutorial 管理資料庫 (database) 📝

* [Youtube Demo](https://youtu.be/-1B4ldgYyGA)

透過 [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/) 管理資料庫 (database)

## 特色
* [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/) 管理資料庫 (database)。

## 安裝套件
確定電腦有安裝 [Python](https://www.python.org/) 之後

請在 cmd (命令提示字元) 輸入以下指令
```
pip install Flask-Migrate
```

clone 我的簡單範例

```
git clone https://github.com/twtrubiks/Flask-Migrate-Tutorial.git
```

## 使用方法

clone 完之後,請切換到 Entity 資料夾底下

Entity.py

```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

class PictureDate(db.Model):
__tablename__ = 'PictureDate'

Id = db.Column(db.Integer, primary_key=True)
Uuid = db.Column(db.String(64), unique=True)
Title = db.Column(db.String(64))
Description = db.Column(db.String(128))

if __name__ == '__main__':
manager.run()

```

步驟一 : 先初始化
```
python Entity.py db init
```
![alt tag](http://i.imgur.com/WK2vhKg.jpg)

步驟二 : migrate
```
python Entity.py db migrate
```
![alt tag](http://i.imgur.com/iCTWKlb.jpg)

步驟三 : upgrade
```
python Entity.py db upgrade
```
![alt tag](http://i.imgur.com/4Wh369t.jpg)

你會發現目標資料夾裡多了 app.db

![alt tag](http://i.imgur.com/mpzTLgU.jpg)

可以使用 [SQLiteDatabaseBrowser](http://sqlitebrowser.org/) 打開 DB

![alt tag](http://i.imgur.com/1qL2vwP.jpg)

![alt tag](http://i.imgur.com/VtkNV3u.jpg)

假如今天你想要 新增 or 刪除 欄位 或是 修改欄位的型態 ,

修改 Entity.py , 之後,再重複步驟二以及步驟三即可。

其他說明 :

這裡是使用 SQLITE 當作範例,如果你要換其他的資料庫,請修改這串字串
```
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
```

假如今天我們要使用 PostgreSQL , 我們就要將這串字串修改為 ( 需要額外安裝套件 [psycopg2](http://initd.org/psycopg/) )
```
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:PASSWORD@localhost/DB'
```

假如今天我們要使用 MySQL , 我們就要將這串字串修改為 ( 需要額外安裝套件 [mysql-connector-python](https://github.com/mysql/mysql-connector-python) )
```
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://user:PASSWORD@XXX.XXX.XX.XX:3306/DB'
```

假如今天我們要使用 MSSQL , 我們就要將這串字串修改為 ( 需要額外安裝套件 [pyodbc](https://mkleehammer.github.io/pyodbc/) )
```
app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://user:PASSWORD@XXX.XXX.XX.XX/DB?driver=ODBC+Driver+11+for+SQL+Server'
```

## 操作 db

增加一筆資料 ( app.py )

```
from Model.dModel import *
import uuid

uuid = str(uuid.uuid4())
title = "test Title"
description = "test Description"

insert_data = PictureDate(Uuid=uuid
, Title=title
, Description=description
)
db.session.add(insert_data)
db.session.commit()
print("DONE")

```

執行完上述指令,如果正確無誤,db 會多出一筆資料。

![alt tag](http://i.imgur.com/ywgs8zs.jpg)

更多操作請參考 [SQLAlchemy](https://zh.wikipedia.org/wiki/SQLAlchemy)

## 執行環境
* Python 3.4.3

## Reference
* [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/)

## License
MIT license