【问题标题】: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) 以获取有关如何运行终端命令的信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-27
          • 2014-12-02
          • 2012-10-13
          • 2017-04-27
          • 1970-01-01
          • 1970-01-01
          • 2023-01-27
          • 1970-01-01
          相关资源
          最近更新 更多