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

时间:2019-05-16 06:10:01

标签: flask flask-sqlalchemy alembic

当前,我跑步

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

如果数据库不存在。我想在Python中运行此程序,例如像

app.create_db()

这样我就不必在意设置数据库了。有可能吗?

我使用flask-sqlalchemyflask-migrations插件

3 个答案:

答案 0 :(得分:1)

很明显,您已经安装了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限制?

答案 1 :(得分:0)

您可以为此使用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 :(得分:0)

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