【问题标题】:How can I initialize the database automatically with SQLalchemy and Alembic?如何使用 SQLalchemy 和 Alembic 自动初始化数据库?
【发布时间】:2019-05-16 06:10:01
【问题描述】:
目前,我正在运行
$ flask db init
$ flask db migrate -m "initialization"
$ flask db upgrade
如果数据库不存在。我想在 Python 中运行它,例如像
app.create_db()
这样我就不必关心设置数据库了。这可能吗?
我使用flask-sqlalchemy 和flask-migrations 插件
【问题讨论】:
标签:
flask
flask-sqlalchemy
alembic
【解决方案1】:
您可以为此使用SQLAlchemy-Utils。
from sqlalchemy import create_engine
from sqlalchemy_utils import database_exits,create_database
def validate_database():
engine = create_engine('postgres://postgres@localhost/name')
if not database_exists(engine.url): # Checks for the first time
create_database(engine.url) # Create new DB
print("New Database Created"+database_exists(engine.url)) # Verifies if database is there or not.
else:
print("Database Already Exists")
在您的 __init__.py 文件中调用此方法,以便在您的服务器每次启动时进行检查。
【解决方案2】:
很明显,你已经安装了flask-migrate, flask-sqlalchemy。
所以,你可以这样做:
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
db.create_all()
API DOC: flask.ext.sqlalchemy.SQLAlchemy.create_all
但是你的问题让我很困惑。为什么被SQLAlchemy和Alembic限制?
【解决方案3】:
有db.create_all(),但我认为当您使用迁移时,您应该坚持使用迁移脚本。
需要注意的是,如果您已设置好迁移文件(即迁移文件夹),那么您只需要flask db migrate
如果您在本地运行此命令,我会坚持手动执行此命令。
如果您在服务器上使用它,您可能应该使用为您执行此操作的部署脚本。您可以查看fabric (www.fabfile.org) 以获取有关如何运行终端命令的信息