如何使用 SQLalchemy 和 Alembic 自动初始化数据库?
How can I initialize the database automatically with SQLalchemy and Alembic?
目前,我运行
$ flask db init
$ flask db migrate -m "initialization"
$ flask db upgrade
如果数据库不存在。我想在 Python 内 运行 这个,例如像
app.create_db()
这样我就不必关心设置数据库了。这可能吗?
我使用 flask-sqlalchemy
和 flask-migrations
插件
您可以使用 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 文件中调用此方法,以便它在您的服务器每次启动时进行检查。
有 db.create_all()
,但我认为当您使用迁移时,您应该坚持使用迁移脚本。
需要注意的是,如果您已设置所有迁移文件(即迁移文件夹),那么您只需要 flask db migrate
如果您 运行 在本地执行此操作,我会坚持手动执行此命令。
如果您在服务器上使用它,您可能应该使用为您执行此操作的部署脚本。您可以查看 fabric
(www.fabfile.org) 以获取有关如何 运行 终端命令
的信息
显然,您已经安装了 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
限制?
目前,我运行
$ flask db init
$ flask db migrate -m "initialization"
$ flask db upgrade
如果数据库不存在。我想在 Python 内 运行 这个,例如像
app.create_db()
这样我就不必关心设置数据库了。这可能吗?
我使用 flask-sqlalchemy
和 flask-migrations
插件
您可以使用 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 文件中调用此方法,以便它在您的服务器每次启动时进行检查。
有 db.create_all()
,但我认为当您使用迁移时,您应该坚持使用迁移脚本。
需要注意的是,如果您已设置所有迁移文件(即迁移文件夹),那么您只需要 flask db migrate
如果您 运行 在本地执行此操作,我会坚持手动执行此命令。
如果您在服务器上使用它,您可能应该使用为您执行此操作的部署脚本。您可以查看 fabric
(www.fabfile.org) 以获取有关如何 运行 终端命令
显然,您已经安装了 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
限制?