Flask migration is not applying on all tables

Viewed 175

i have a project where i create four tables (users,products, agents, customer) when i do migration with: flask db init, flask db migrate, flask db upgrade, only users and products get migrated here it is the structure of my project: enter image description here

enter image description here

my code for user model is: from main.extensions import db from main.shared.base_model import BaseModel, HasCreatedAt, HasUpdatedAt class User(BaseModel, HasCreatedAt, HasUpdatedAt): tablename = 'users'

     id = db.Column(db.Integer, primary_key=True)
     email = db.Column(db.String, unique=True, nullable=False)
     password = db.Column(db.String, nullable=False)
     phone = db.Column(db.Integer)

my code for every module starting by agent model:

  from main.extensions import db


class Agent(db.Model):
    __tablename__ = 'agents'
    id = db.Column(db.Integer, primary_key=True)
    picture = db.Column(db.String)
    def __init__(self,email, password, phone, picture):
       self.email = email
       self.password=password
       self.phone=phone
       self.picture=picture

and for the model in customer is:

from main.modules.user.models import User
from main.extensions import db


class Customer(User):
   __tablename__ = 'customers'
   approved = db.Column(db.Boolean)
   picture = db.Column(db.String)

   def __init__(self, email, password, phone, picture, approved):
       self.approved = approved
       self.picture = picture
       User.__init__(self,email,password,phone)

and finnaly the products model has:

from main.extensions import db
from main.shared.base_model import BaseModel, HasCreatedAt, HasUpdatedAt


class Product(BaseModel, HasCreatedAt, HasUpdatedAt):
    __tablename__ = 'products'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)

the settings.py contains the following code: and this init files for every model contains this code: for the user __init.py:

from main.modules.users.api import blueprint as api

for the customer __init.py:

from main.modules.customer.api import blueprint as api

for the agent__init.py:

from main.modules.agent.api import blueprint as api

for the prodcut__init.py:

from main.modules.product.api import blueprint as api



import os




class DevSettings(Settings):
  DEBUG = True
  basedir = os.path.abspath(os.path.dirname(__file__))
  SQLALCHEMY_DATABASE_URI="sqlite:///" + os.path.join(basedir, "data.sqlite")
  SQLALCHEMY_TRACK_MODIFICATIONS=False

and the extension.py contains:

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
migrate = Migrate()

and the app.py contains this:

from flask import Flask, Blueprint

from main.extensions import db, migrate
from main.modules import product, agent, customer, user
from main.settings import DevSettings

MODULES = [ agent, customer,product, user]

main = Blueprint('main', __name__)


def create_app(settings=DevSettings):
   app = Flask(__name__)
   # Utiliser la configuration (settings).
   app.config.from_object(settings)
   app.config['SECRET_KEY'] = 'mysecretkey'
   # On initialise les libraries Python.
   # Init SQLAlchemy.
   db.init_app(app)
   # Init Migrate.
   migrate.init_app(app, db)
   app.register_blueprint(main)
   register_modules(app)
  return app

def register_modules(app):
  for m in MODULES:
      if hasattr(m, 'api'):
          app.register_blueprint(m.api)
0 Answers
Related