如何让烧瓶迁移来创建数据库?
How to get flask-migrate to create the database?
换句话说,如何为数据库创建生成迁移,或者这是一个反模式?
我是 运行
python manage.py db migrate -m "init"
得到
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "auth" does not exist
manage.py
# manage.py
import os
import unittest
import coverage
from flask_script import Manager
from authentek.app import create_app as initialize_app
from authentek.logger import log
from authentek.extensions import db, migrate
from authentek.database.models import User, BlacklistToken # noqa
from flask_migrate import MigrateCommand
app = initialize_app(False, True)
manager = Manager(app)
migrate.init_app(app)
manager.add_command('db', MigrateCommand)
print(app.extensions)
COV = coverage.coverage(
branch=True,
include='authentek/*',
omit=[
'authentek/tests/*',
]
)
COV.start()
@manager.command
def test():
"""Runs the unit tests without test coverage."""
tests = unittest.TestLoader().discover('authentek/tests', pattern='test*.py')
result = unittest.TextTestRunner(verbosity=2).run(tests)
if result.wasSuccessful():
return 0
return 1
@manager.command
def cov():
"""Runs the unit tests with coverage."""
tests = unittest.TestLoader().discover('authentek/tests')
result = unittest.TextTestRunner(verbosity=2).run(tests)
if result.wasSuccessful():
COV.stop()
COV.save()
print('Coverage Summary:')
COV.report()
basedir = os.path.abspath(os.path.dirname(__file__))
covdir = os.path.join(basedir, 'tmp/coverage')
COV.html_report(directory=covdir)
print('HTML version: file://%s/index.html' % covdir)
COV.erase()
return 0
return 1
@manager.command
def drop_db():
"""Drops the db tables."""
db.drop_all()
if __name__ == '__main__':
manager.run()
出于安全考虑,您不想让您的应用程序拥有创建或销毁数据库的能力,您想要的只是应用程序可以对单个数据库进行读写访问。
因此,您通常必须手动或通过具有数据库管理权限的单独脚本创建数据库。
在单元测试的情况下,我认为只要您有一个单独的数据库服务器用于测试,配置数据库管理员凭据就没有风险,因此不存在影响测试环境之外的其他数据库的风险。在这种情况下,您可以使用 SQL.
添加创建和销毁数据库的函数
换句话说,如何为数据库创建生成迁移,或者这是一个反模式?
我是 运行
python manage.py db migrate -m "init"
得到
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "auth" does not exist
manage.py
# manage.py
import os
import unittest
import coverage
from flask_script import Manager
from authentek.app import create_app as initialize_app
from authentek.logger import log
from authentek.extensions import db, migrate
from authentek.database.models import User, BlacklistToken # noqa
from flask_migrate import MigrateCommand
app = initialize_app(False, True)
manager = Manager(app)
migrate.init_app(app)
manager.add_command('db', MigrateCommand)
print(app.extensions)
COV = coverage.coverage(
branch=True,
include='authentek/*',
omit=[
'authentek/tests/*',
]
)
COV.start()
@manager.command
def test():
"""Runs the unit tests without test coverage."""
tests = unittest.TestLoader().discover('authentek/tests', pattern='test*.py')
result = unittest.TextTestRunner(verbosity=2).run(tests)
if result.wasSuccessful():
return 0
return 1
@manager.command
def cov():
"""Runs the unit tests with coverage."""
tests = unittest.TestLoader().discover('authentek/tests')
result = unittest.TextTestRunner(verbosity=2).run(tests)
if result.wasSuccessful():
COV.stop()
COV.save()
print('Coverage Summary:')
COV.report()
basedir = os.path.abspath(os.path.dirname(__file__))
covdir = os.path.join(basedir, 'tmp/coverage')
COV.html_report(directory=covdir)
print('HTML version: file://%s/index.html' % covdir)
COV.erase()
return 0
return 1
@manager.command
def drop_db():
"""Drops the db tables."""
db.drop_all()
if __name__ == '__main__':
manager.run()
出于安全考虑,您不想让您的应用程序拥有创建或销毁数据库的能力,您想要的只是应用程序可以对单个数据库进行读写访问。
因此,您通常必须手动或通过具有数据库管理权限的单独脚本创建数据库。
在单元测试的情况下,我认为只要您有一个单独的数据库服务器用于测试,配置数据库管理员凭据就没有风险,因此不存在影响测试环境之外的其他数据库的风险。在这种情况下,您可以使用 SQL.
添加创建和销毁数据库的函数