我最近一直在学习python,并实践了一些教程,并且效果很好,直到我将应用程序划分为子模块以使其更易于使用蓝图进行维护,否则应用程序崩溃并引发了以下错误:OperationalError:(sqlite3.OperationalError)没有这样的表,这是我如何划分我的应用程序:
-instance
-flask.cfg
-app
- static // Folder for css
- templates // Folder for common html files
-__init__.py // to init the app
-module1
-__init__.py // to register module blueprint
-subModule1
-subModule1 Group1
-templates
-htmls files
-__init__.py file //to register group1 blueprint
-Group1Form
-Group1Model
-Group1View
-subModule1 Group2
-templates
-htmls files
-__init__.py file //to register group2 blueprint
-Group2Form
-Group2Model
-Group2View
-subModule2
....
-main.py
当我使用flask run
时,应用程序运行正常,但是当我使用db.session.add()
方法时,除了找不到该表之外,我遇到了一个问题。我已经尝试了许多解决此问题的方法,但是没有运气。这是针对同一问题的一些链接:
OperationalError: (sqlite3.OperationalError) no such table: user
https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/
Python sqlite3.OperationalError: no such table:
'No application found. Either work inside a view function or push an application context.'
这是flask.cfg文件:
import os
BASEDIR = os.path.abspath(os.path.dirname(__file__))
SECRET_KEY = os.urandom(32)
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.abspath('app.db')
这是我如何在主__init__.py
文件中初始化应用的方法:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(config_filename=None):
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile(config_filename)
initialize_extensions(app)
register_blueprints(app)
def create_app(config_filename=None):
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile(config_filename)
initialize_extensions(app)
register_blueprints(app)
return app
def initialize_extensions(app):
db.init_app(app)
with app.app_context():
db.create_all()
def register_blueprints(app):
from app.module1.config.university import university_blueprint
app.register_blueprint(university_blueprint)
from app.module1.config.department import department_blueprint
app.register_blueprint(department_blueprint)
from app.module1.authors.author import author_blueprint
app.register_blueprint(author_blueprint)
from app.module1.authors.publications import publications_blueprint
app.register_blueprint(publications_blueprint)
答案 0 :(得分:0)
您是否可以在app.app_context()函数内移动db.init_app()
with app.app_context():
db.init_app()
答案 1 :(得分:0)
我想出了这个问题,我想去解决这个问题:
with app.app_context():
db.create_all()
注册蓝图后