SQLAlchemy InvalidRequestError:找不到名称仅在gunicorn上发生 - python

好的,我有以下几点。在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")

并在department/models.py中:

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:初始化映射器时
映射器|用户|用户,表达式'user_department_relationship_table'
找不到名称(“名称'user_department_relationship_table'为
未定义”)。如果这是一个类名,请考虑添加此名称
关系到类之后
已经定义了两个依赖类。

我想知道是否有更好的方法来组织这些部分,以避免明显的错误,但是我很好奇为什么该组织在开发服务器上可以正常工作,但会在gunicorn / heroku上带来一些麻烦。

参考方案

好吧,我无法解释heroku与开发服务器之间的差异,但是我通过将Department模式从

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

users = relationship("User", secondary=user_department_relationship_table, backref="departments")

它会自动设置用户模型,这反过来又意味着我可以删除任何提及Department的信息以及关系表。

¯\ _(ツ)_ /¯

SQLAlchemy:避免多重继承并拥有抽象基类 - python

因此,我有一堆使用SQLAlchemy的表,它们被建模为对象,这些对象从结果继承到对declarative_base()的调用。即:Base = declarative_base() class Table1(Base): # __tablename__ & such here class Table2(Base): # __tablename__ …

SQLalchemy数据库列应采用哪种模型来包含数据数组? - python

因此,我正在尝试建立一个数据库,该数据库的行将经常修改。例如,每小时,我想向数据库的特定部分添加一个数字。因此,如果将self.checkmarks输入等于3的数据库,最好的方法是用增加的数字更新数据库的此部分以使self.checkmarks现在等于3, 2?我尝试将列建立为db.Array,但出现属性错误: AttributeError:“ SQLAlc…

插入带有复合主键的模型时发生IntegrityError - python

我试图用复合主键创建一个表。它具有一个整数和两个字符串字段作为键。当我提交会话时,它会引发一个IntegrityError。我在做什么错了?class Targets(db.Model): __tablename__ = 'Targets' id = db.Column(db.Integer, primary_key=True) Even…

flask sqlalchemy-根据数据库中的列动态生成数据模型 - python

有没有一种方法可以根据Flask SQLAlchemy的数据库表中的列动态生成数据库模型?我有一个应用程序来显示数据库表中的数据,但是列名有时会更改并破坏我的应用程序。我希望有一种方法可以根据数据库中的实际列名动态​​生成数据模型。我目前明确声明所有列,如下所示。class MyDbModel(db.Model): __tablename__ = '…

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…