Reputation: 13
When importing models into app.py (from models import Message), the error "The 'message' table is already defined for this MetaData instance" appears. The problem is solved if, instead of importing, duplicate the model from models.py into app.py. But I don't want to do this
models.py
from app import db
import sqlalchemy.types as types
class Message(db.Model):
id = db.Column(db.Integer, primary_key=True)
function_name = db.Column(db.String(255), default=None)
app.py
from flask import Flask
from config import Configuration
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
app = Flask(__name__)
app.config.from_object(Configuration)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
from models import Message
admin = Admin(app)
admin.add_view(ModelView(Message, db.session))
Upvotes: 0
Views: 723
Reputation: 116
You can use python alias for import. Example
from Models import Message as ModelMessage
or the name you would like to use. You can check here also Can you define aliases for imported modules in Python?
Upvotes: 1