如何修复'flask db.create_all()error'?

问题描述 投票:0回答:1

我有创建应用程序功能的flask init。我为我的unitests创建测试文件。在unitest类中添加setUp函数是我创建新的烧瓶应用程序并添加上下文,推送上下文。接下来我使用create_all()函数创建测试数据库,并且,我启动测试文件,我有下一个错误:

in _execute_for_all_tables op(bind=self.get_engine(app, bind), **extra) 

TypeError:create_all()得到了一个意外的关键字参数'forms'我没有'form'文件或模型或任何变量。

在flask_sqlalchemy / init.py MetaData(bind = None)中出现此错误之前,可能会有所帮助。


from flask import Flask
from config import Config
from blocker_application.database import db
from flask_migrate import Migrate
from flask_login import LoginManager
from flask_moment import Moment

migrate = Migrate()
login = LoginManager()
login.login_view = 'user.login'
moment = Moment()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)
    login.init_app(app)
    moment.init_app(app)

    from blocker_application.main.routes import bp_main
    from blocker_application.errors.handlers import bp_error
    from blocker_application.reports.routes import bp_reports
    from blocker_application.user.routes import bp_user
    from blocker_application.applications.routes import bp_applications
    app.register_blueprint(bp_main)
    app.register_blueprint(bp_error)
    app.register_blueprint(bp_reports, url_prefix='/reports')
    app.register_blueprint(bp_user, url_prefix='/user')
    app.register_blueprint(bp_applications, url_prefix='/applications')


    return app

from blocker_application import models
________________________________________________________________________

/config.py

import os

basedir = os.path.abspath(os.path.dirname(__file__))


class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'not realy finish secret key configuration'
    SQLALCHEMY_DATABASE_URI = 'mysql://some_database'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class TestConfig(Config):
    TESTING = True
    SQLALCHEMY_BINDS = {'test': 'mysql://some_database_test'}
______________________________________________________________________

/tests.py

import unittest
from blocker_application import create_app, db
from blocker_application import models
from config import TestConfig


class UserModelCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app(TestConfig)
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all(bind='test')

    def tearDown(self):
        db.session.remove()
        db.drop_all(bind='test')
        self.app_context.pop()

    def test_password(self):
        u = models.User(username='Mark')
        u.set_password('Mark')
        self.assertTrue(u.check_password('Mark'))
        self.assertFalse(u.check_password('Tony'))

if __name__ == '__main__':
    unittest.main(verbosity=2)
python flask flask-sqlalchemy
1个回答
0
投票

我找到了决定。创建虚拟环境后,单元测试工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.