Flask-SQLAlchemy下alembic的配置步骤:
1. 定义好自己的模型和在config中配置数据库连接
DEBUG = True
# 修改代码后自动重新加载
TEMPLATES_AUTO_RELOAD=True
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'test_flask_learn'
USERNAME = 'root'
PASSWORD ='123456'
#dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/" \
"{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
#SQLALCHEMY_DATABASE_URI是定死的,只能这么写
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
DEBUG = True
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
class UserModel(db.Model):
__tablename__ = 'user_model'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(50),nullable=False)
age=db.Column(db.Integer)
def __repr__(self):
return "<User(username: %s)>" % self.username
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(50),nullable=False)
uid = db.Column(db.Integer,db.ForeignKey("user_model.id"))
author = db.relationship("User",backref="artiles")
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()
2. 使用alembic创建一个仓库:`alembic init [仓库的名字,推荐使用alembic]`。
alembic init alembic
3. 修改配置文件:
* 在`alembic.ini`中,给`sqlalchemy.url`设置数据库的连接方式。这个连接方式跟sqlalchemy的方式一样的。
sqlalchemy.url = mysql+pymysql://root:123456@localhost:3306/test_flask_learn?charset=utf8
* 在`alembic/env.py`中的`target_metadata`设置模型的`Base.metadata`。但是要导入`models`,需要将models所在的路径添加到这个文件中。示例代码如下:
# 将E:\flask_learn路径添加进来
import sys, os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import flask_learn
target_metadata = flask_learn.db.metadata
4. 将ORM模型生成迁移脚本:`alembic revision --autogenerate -m 'message'`。
5. 将生成的脚本映射到数据库中:`alembic upgrade head`。
6. 以后如果修改了模型,重复4、5步骤。
Note:
在终端中,如果想要使用alembic,则需要首先进入到安装了alembic的虚拟环境中,不然就找不到这个命令。