当前,我跑步
$ flask db init
$ flask db migrate -m "initialization"
$ flask db upgrade
如果数据库不存在。我想在Python中运行此程序,例如像
app.create_db()
这样我就不必在意设置数据库了。有可能吗?
我使用flask-sqlalchemy
和flask-migrations
插件
答案 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
但是您的问题使我感到困惑。为什么受SQLAlchemy
和Alembic
限制?
答案 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),以获取有关如何运行终端命令的信息