Python SQLAlchemy InvalidRequestError:无法定位仅在gunicorn上发生的名称

Python SQLAlchemy InvalidRequestError:无法定位仅在gunicorn上发生的名称,python,heroku,flask,sqlalchemy,gunicorn,Python,Heroku,Flask,Sqlalchemy,Gunicorn,好的,我有以下几点。在user/models.py中: class User(UserMixin, SurrogatePK, Model): __tablename__ = 'users' id = Column(db.Integer, primary_key=True, index=True) username = Column(db.String(80), unique=True, nullable=False) email = Column(db.Strin

好的,我有以下几点。在
user/models.py
中:

class User(UserMixin, SurrogatePK, Model):
    __tablename__ = 'users'
    id = Column(db.Integer, primary_key=True, index=True)
    username = Column(db.String(80), unique=True, nullable=False)
    email = Column(db.String(80), unique=False, nullable=False)
    password = Column(db.String(128), nullable=True)
    departments = relationship("Department",secondary="user_department_relationship_table", back_populates="users")
user_department_relationship_table=db.Table('user_department_relationship_table',
                             db.Column('department_id', db.Integer,db.ForeignKey('departments.id'), nullable=False),
                             db.Column('user_id',db.Integer,db.ForeignKey('users.id'),nullable=False),
                             db.PrimaryKeyConstraint('department_id', 'user_id') )


class Department(SurrogatePK, Model):
    __tablename__ = 'departments'
    id = Column(db.Integer, primary_key=True, index=True)
    name = Column(db.String(80), unique=True, nullable=False)
    short_name = Column(db.String(80), unique=True, nullable=False)
    users = relationship("User", secondary=user_department_relationship_table,back_populates="departments")
部门/models.py
中:

class User(UserMixin, SurrogatePK, Model):
    __tablename__ = 'users'
    id = Column(db.Integer, primary_key=True, index=True)
    username = Column(db.String(80), unique=True, nullable=False)
    email = Column(db.String(80), unique=False, nullable=False)
    password = Column(db.String(128), nullable=True)
    departments = relationship("Department",secondary="user_department_relationship_table", back_populates="users")
user_department_relationship_table=db.Table('user_department_relationship_table',
                             db.Column('department_id', db.Integer,db.ForeignKey('departments.id'), nullable=False),
                             db.Column('user_id',db.Integer,db.ForeignKey('users.id'),nullable=False),
                             db.PrimaryKeyConstraint('department_id', 'user_id') )


class Department(SurrogatePK, Model):
    __tablename__ = 'departments'
    id = Column(db.Integer, primary_key=True, index=True)
    name = Column(db.String(80), unique=True, nullable=False)
    short_name = Column(db.String(80), unique=True, nullable=False)
    users = relationship("User", secondary=user_department_relationship_table,back_populates="departments")
在本地使用flask开发服务器完全可以。但是,一旦我部署到heroku上的标准python buildpack上,
cpt/app.py
将加载这两个模块以注册它们的蓝图:

from cpt import (
        public, user, department
        )

...


def register_blueprints(app):
    app.register_blueprint(public.views.blueprint)
    app.register_blueprint(user.views.blueprint)
    app.register_blueprint(department.views.blueprint)
    return None
最终会出现以下错误:

sqlalchemy.exc.InvalidRequestError:初始化映射程序时 映射器|用户|用户,表达式“用户|部门|关系|表” 找不到名称(“名称”“用户\部门\关系\表”为 未定义”)。如果这是类名,请考虑添加 之后的类的关系() 两个依赖类都已定义


我想知道是否有更好的方法来组织这些部分以避免明显的错误,但我更好奇的是,为什么这个组织在开发服务器上运行得很好,但在gunicorn/heroku上却爆发了一些激烈的事件。

我无法解释heroku和开发服务器之间的差异,但是我把部门模式从

users = relationship("Department",secondary="user_department_relationship_table", back_populates="users")

这将自动设置用户模型,这反过来意味着我可以删除关于部门和关系表的任何提及


“”\_(ツ)_/“

您是否有两个数据库,一个在heroku上,一个在local上?它似乎在抱怨您的生产环境中不存在该表。@ChrisHawkes这似乎是在应用程序尝试与数据库通信之前发生的。但是,有一个alembic迁移来添加我在这两个环境中都没有问题地运行的user\u department\u relationship\u表。S在我的例子中,测试环境不会出错,这使得在产品部署之前很难了解它