首页 > 解决方案 > Flask 迁移不适用于所有表

问题描述

我有一个项目,当我进行迁移时,我创建了四个表(用户、产品、代理、客户):flask db init、flask db migrate、flask db upgrade,只有用户和产品在这里被迁移这是我项目的结构: 在此处输入图像描述

在此处输入图像描述

我的用户模型代码是: 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)

我从代理模型开始的每个模块的代码:

  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

对于客户的模型是:

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)

最后产品模型有:

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)

settings.py 包含以下代码:每个模型的这个初始化文件都包含这个代码:对于用户 __init.py:

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

对于客户 __init.py:

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

对于代理__init.py:

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

对于 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

并且 extension.py 包含:

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
migrate = Migrate()

app.py 包含以下内容:

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)

标签: pythonflaskmigrationdatabase-migrationflask-migrate

解决方案


推荐阅读