Как я могу автоматически инициализировать базу данных с помощью SQLalchemy и Alembic?

В настоящее время я бегу

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

если база данных не существует. Я хотел бы запустить это в Python, например. что-то типа

app.create_db()

так что мне не нужно заботиться о настройке базы данных. Это возможно?

Я использую плагины flask-sqlalchemy и flask-migrations


person Martin Thoma    schedule 16.05.2019    source источник


Ответы (3)


Очевидно, вы установили 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?

person NicoNing    schedule 16.05.2019

Для этого вы можете использовать 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, чтобы он проверял каждый раз, когда ваш сервер запускается.

person Tech at The Sparks Foundation    schedule 16.05.2019

Есть db.create_all(), но я думаю, что когда вы используете миграцию, вы должны придерживаться сценариев миграции. Следует отметить, что если у вас настроены все файлы миграции (т. е. папка миграции), то все, что вам нужно, это flask db migrate. Если вы запускаете это локально, я бы придерживался выполнения этой команды вручную. Если вы используете это на сервере, вам, вероятно, следует использовать сценарий развертывания, который сделает это за вас. Вы можете посмотреть fabric (www.fabfile.org) для получения информации о том, как запускать команды терминала.

person Daniel    schedule 16.05.2019