-1

我在测试期间删除了用户表中的所有信息。现在,当我尝试运行manage.py命令来重新创建管理员用户时,我得到RuntimeError: application not registered on db instance and no application bound to current context. 我一直在阅读有关 Flask 上下文的内容,尤其是 Flask 的上下文堆栈的目的是什么?,但我不清楚如何解决这个问题。如何修复此错误?

$ 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="ad@min.com",
        password="admin",
        admin=True,
        confirmed=True,
        confirmed_on=datetime.datetime.now()
    ))
    db.session.commit()

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

1 回答 1

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))

您收到错误是因为应用程序上下文仅在管理器运行时才处于活动状态,但您过早地调用了该函数。

于 2016-02-18T19:50:00.763 回答