如何使用 SQLalchemy 和 Alembic 自动初始化数据库?

How can I initialize the database automatically with SQLalchemy and Alembic?

目前,我运行

$ flask db init
$ flask db migrate -m "initialization"
$ flask db upgrade

如果数据库不存在。我想在 Python 内 运行 这个,例如像

app.create_db()

这样我就不必关心设置数据库了。这可能吗?

我使用 flask-sqlalchemyflask-migrations 插件

您可以使用 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 文件中调用此方法,以便它在您的服务器每次启动时进行检查。

db.create_all(),但我认为当您使用迁移时,您应该坚持使用迁移脚本。 需要注意的是,如果您已设置所有迁移文件(即迁移文件夹),那么您只需要 flask db migrate 如果您 运行 在本地执行此操作,我会坚持手动执行此命令。 如果您在服务器上使用它,您可能应该使用为您执行此操作的部署脚本。您可以查看 fabric (www.fabfile.org) 以获取有关如何 运行 终端命令

的信息

显然,您已经安装了 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

但是你的问题让我很困惑。为什么受 SQLAlchemyAlembic 限制?