Как мога да инициализирам базата данни автоматично с 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