raphattack
raphattack

Reputation: 179

flask_sqlalchemy create model from different file

I am trying to define and create my models with flask_sqlalchemy.

If I do it all in one script, it works:

all_in_one.py

from config import DevConfig
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object(DevConfig)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = app.config.get("DB_URI")
db = SQLAlchemy(app)


class Members(db.Model):
    id = db.Column(db.String, primary_key=True, nullable=False)


def main():
    db.drop_all()
    db.create_all()


if __name__ == "__main__":
    main()

The Members table is created.

If I split this process into files, I can't seem to get the db object to register my Members model and do anything.

root
│-- config.py
│-- create.py
│-- database.py
│-- members.py

database.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

members.py

from database import db


class Members(db.Model):
    id = db.Column(db.String, primary_key=True, nullable=False)

create.py

from database import db
from config import DevConfig
from flask import Flask

app = Flask(__name__)
app.config.from_object(DevConfig)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = app.config.get("DB_URI")


def main():
    db.init_app(app)

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


if __name__ == "__main__":
    main()

The Members table does not get created.

Upvotes: 1

Views: 1276

Answers (1)

manhvd
manhvd

Reputation: 346

add import members below db.init_app(app)

from database import db
from config import DevConfig

from flask import Flask

app = Flask(__name__)
app.config.from_object(DevConfig)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = app.config.get("DB_URI")


def main():
    db.init_app(app)
    import members

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


if __name__ == "__main__":
    main()

Upvotes: 2

Related Questions