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

В настоящее время я запускаю

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

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

app.create_db()

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

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

Ответы [ 3 ]

1 голос
/ 16 мая 2019

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

0 голосов
/ 16 мая 2019

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

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

...