python - Sqlalchemy db.create_all() not creating tables -
i following this pattern avoid circular imports. pattern seems pretty niche it's been difficult trying find solution googling.
models.py
from sqlalchemy.orm import relationship db = sqlalchemy() class choice(db.model): id = db.column(db.integer, primary_key=true) text = db.column(db.string(32)) votes = relationship("vote") def __init__(self, text): self.text = text
application.py
app = flask(__name__) app.debug = true basedir = os.path.abspath(os.path.dirname(__file__)) app.config['sqlalchemy_database_uri'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite3') app.config['sqlalchemy_track_modifications'] = false db.init_app(app) # reinitialiez db.model avoid cyclical imports in models.py
db_create.py
#!flask/bin/python application import app, db models import choice db.init_app(app) db.create_all() db.session.add(choice("red")) db.session.add(choice("blue")) db.session.add(choice("green")) db.session.commit()
when run db_create.py separately, get:
$ python db_create.py traceback (most recent call last): file "db_create.py", line 6, in <module> db.create_all() file "/home/ubuntu/.virtualenvs/paw-py/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 972, in create_all self._execute_for_all_tables(app, bind, 'create_all') file "/home/ubuntu/.virtualenvs/paw-py/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 949, in _execute_for_all_tables app = self.get_app(app) file "/home/ubuntu/.virtualenvs/paw-py/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 922, in get_app raise runtimeerror('application not registered on db ' runtimeerror: application not registered on db instance , no application bound current context
what should do? best pattern deal this? i've tried adding db.create_all()
in application.py after if __name__ == '__main__'
still getting same error
tell flask-sqlalchemy "current" app app_context
with app.app_context(): # code here db.create_all()
Comments
Post a Comment