0

I have been learning python recently and practiced a couple of tutorials and its been going fine, till I have divided my application to sub modules to make it easier to maintain using blueprints, after doing so the application crashed and throw the following error: OperationalError: (sqlite3.OperationalError) no such table, here is how im dividing my application:

-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

The application run fine when I use flask run but I have an issue when I use db.session.add() method with the exception that the table was not found. I have tried many solutions to this issue but no luck. here is some links for the same issue:

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.'

Here is the flask.cfg file:

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

And here is how I am initializing the app in the main __init__.py file:

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)

2 Answers 2

0

can you move db.init_app() inside app.app_context() function

    with app.app_context():
        db.init_app()
Sign up to request clarification or add additional context in comments.

2 Comments

you initiated ur database already right, and u have the file .db in your project structure
I have solved it by adding with app.app_context(): db.create_all() after registring my blueprints
0

I figured out the issue, I was suppose to place:

with app.app_context(): db.create_all()

after registering the blueprints

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.