使用Alembic升级内存中的sqlite3数据库

时间:2015-07-14 12:17:09

标签: python sqlite flask alembic

我有一个使用应用工厂创建的Flask应用。使用pytest进行测试时,我想使用内存中的sqlite数据库,因为它比使用临时文件要快得多。我使用Flask-Migrate集成了Alembic和Flask-SQLAlchemy。 Flask-Migrate使用命令行命令来管理数据库。如何从我的测试代码中运行迁移以设置数据库?

config.py

class DefaultConfig(object):
    DEBUG = True
    TESTING = True

    CSRF_ENABLED = True
    SECRET_KEY = 'this-really-needs-to-change'

    SQLALCHEMY_DATABASE_URI = 'sqlite://'

__init__.py

db = SQLAlchemy()
socketio = SocketIO()
migrate = Migrate()

def create_app(config=None):
    app = Flask(__name__)

    if config is not None:
        config_path = os.path.abspath(config)
        app.config.from_pyfile(config_path)

    elif os.path.isfile(os.path.abspath(CONFIGFILE)):
        app.config.from_pyfile(os.path.abspath(CONFIGFILE))

    else:
        app.config.from_object(DefaultConfig)

    db.init_app(app)
    socketio.init_app(app)
    migrate.init_app(app, db)

    return app

fixtures.py

from flask.ext.migrate import upgrade

from . import create_app, db
from .models import User


class AppFixture(object):
    def __init__(self):
        self.app = create_app()
        self.db = db
        with self.app.app_context():
            upgrade()
            self.users = User.query.all()

拨打upgrade()以上内容并不起作用,之后我会在OperationalError: (sqlite3.OperationalError) no such table: user [SQL: u'SELECT...行收到Users.query

0 个答案:

没有答案