【问题标题】:Python Flask Context - Unable to Create DBPython Flask 上下文 - 无法创建数据库
【发布时间】:2020-11-11 16:58:24
【问题描述】:

我对 Python-Flask 很陌生。我正在开发一个应用程序,我在其中创建了以下“Main.py”脚本。 还有另一个脚本“run.py”来调用“create_app”函数并创建应用程序的实例。

但它抛出“RuntimeError: No application found.要么在视图函数内工作,要么推送应用程序上下文。”错误。

我曾在“create_app()”函数中尝试过here 中提到的选项。

在创建应用程序后,我已尝试将应用程序推送到我的“run.py”文件中的上下文。

在使用“create_app()”函数创建应用程序后,我尝试在“run.py”脚本中创建数据库,但出现如下错误部分所述的错误。

# Main.py Script Inside my application package:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
    db.init_app(app)
    db.create_all()
    return app

我有另一个脚本 "run.py" ,它创建一个应用程序并运行它。

# run.py to create an instance of app and run it

from flaskblog import create_app

app = create_app()
# app.app_context().push()  # Tried this

# db.init_app(app)    # Tried this as well, after commenting the same line in "create_app()" function
# db.create_all()

if __name__ == '__main__':
    app.run(debug=True) 

错误 1

PS Python_Flask> & "C:/Program Files/Python38/python.exe" c:/Document/Codes/Python_Flask/run.py
C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py:833: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
  File "c:/Document/Codes/Python_Flask/run.py", line 3, in <module>
    app = create_app()
  File "c:\Document\Codes\Python_Flask\flaskblog\__init__.py", line 52, in create_app
    db.create_all()
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 1039, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 1016, in _execute_for_all_tables
    app = self.get_app(app)
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 987, in get_app
    raise RuntimeError(
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

错误 2

PS Python_Flask> & "C:/Program Files/Python38/python.exe" c:/Document/Codes/Python_Flask/run.py
C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py:833: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
  File "c:/Document/Codes/Python_Flask/run.py", line 3, in <module>
    app = create_app()
  File "c:\Document\Codes\Python_Flask\flaskblog\__init__.py", line 54, in create_app
    db.create_all()
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 1039, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 1031, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine
    return connector.get_engine()
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 555, in get_engine
    options = self.get_options(sa_url, echo)
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 570, in get_options
    self._sa.apply_driver_hacks(self._app, sa_url, options)
  File "C:\Program Files\Python38\lib\site-packages\flask_sqlalchemy\__init__.py", line 883, in apply_driver_hacks
    if sa_url.drivername.startswith('mysql'):
AttributeError: 'NoneType' object has no attribute 'drivername'

【问题讨论】:

  • 您是否按照错误 1 ​​flask-sqlalchemy.pocoo.org/contexts 中所述访问过这个我也遇到了同样的错误,这对我有用
  • @Aditya :我访问了该页面并尝试了选项,但仍然无法正常工作。我已经评论了这些行,我已经尝试过。
  • @Aditya :我已经简化了查询。你现在可以检查一下,如果你能帮忙的话。
  • flaskblog 包下的 main.py 是什么?如果是,请使用 from flaskblog.main import create_app

标签: python flask sqlalchemy flask-sqlalchemy flask-migrate


【解决方案1】:
with app.app_context():
    db.init_app(app)
    db.create_all()

【讨论】:

  • 我投了赞成票,因为我相信这行得通,但你能详细说明一下它为什么行得通吗?
  • @vestronge:你能详细说明一下吗?
猜你喜欢
  • 2021-07-09
  • 2018-09-05
  • 1970-01-01
  • 2011-08-27
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多