2016-02-18 58 views
-1

我在測試過程中刪除了用戶表中的所有信息。現在,當我嘗試運行manage.py命令來重新創建管理用戶時,我得到了RuntimeError: application not registered on db instance and no application bound to current context。我一直在閱讀Flask上下文,特別是What is the purpose of Flask's context stacks?,但我不清楚如何解決這個問題。我如何解決這個錯誤?用戶表截斷後'未在db實例上註冊的應用程序'

$ python manage.py db create_admin 
Traceback (most recent call last): 
    File "manage.py", line 58, in <module> 
    manager.add_command("create_admin", create_admin()) 
    File "manage.py", line 47, in create_admin 
    confirmed_on=datetime.datetime.now() 
    File "c:\envs\virtalenvs\flask_mini\lib\site-packages\sqlalchemy\orm\scoping.py", line 150, in do 
    return getattr(self.registry(), name)(*args, **kwargs) 
    File "c:\envs\virtalenvs\flask_mini\lib\site-packages\sqlalchemy\util\_collections.py", line 878, in __call__ 
    return self.registry.setdefault(key, self.createfunc()) 
    File "c:\envs\virtalenvs\flask_mini\lib\site-packages\flask_sqlalchemy\__init__.py", line 704, in create_session 
    return SignallingSession(self, **options) 
    File "c:\envs\virtalenvs\flask_mini\lib\site-packages\flask_sqlalchemy\__init__.py", line 149, in __init__ 
    self.app = db.get_app() 
    File "c:\envs\virtalenvs\flask_mini\lib\site-packages\flask_sqlalchemy\__init__.py", line 845, in get_app 
    raise RuntimeError('application not registered on db ' 
RuntimeError: application not registered on db instance and no application bound to current context 

manage.py

import os 
from flask_script import Manager 
from myflaskapp.app import create_app 
from myflaskapp.models.user import User 
from myflaskapp.database import db 

manager = Manager(app) 

@manager.command 
def create_admin(): 
    db.session.add(User(
     username="admin1", 
     email="[email protected]", 
     password="admin", 
     admin=True, 
     confirmed=True, 
     confirmed_on=datetime.datetime.now() 
    )) 
    db.session.commit() 

manager.add_command("create_admin", create_admin()) 
manager.run() 

回答

1

您使用@manager.command,所以你不應該也使用manager.add_command。完全刪除行manager.add_command('create_admin', create_admin())

如果你想使用add_command,然後取出@manager.command和使用manager.add_command('create_admin', Command(create_admin))

您會收到錯誤消息,因爲應用程序上下文僅在管理器運行時處於活動狀態,但您提前調用該函數。

+0

我已經在上面添加了一些代碼,執行了db.init_app(app)。 – user61629

+0

請參閱上面的編輯: – user61629

+0

刪除您建議的行後,$ python manage.py create_admin工作!謝謝。 – user61629

相關問題