Python Flask SQLAlchemy-模型没有属性';外键';

Python Flask SQLAlchemy-模型没有属性';外键';,python,sqlalchemy,flask,flask-sqlalchemy,Python,Sqlalchemy,Flask,Flask Sqlalchemy,我用Flask SQLalchemy创建了3个模型:用户、角色、用户角色 role.py: class Role( ActiveRecord, db.Model ): __tablename__ = "roles" # Schema id = db.Column( db.Integer, primary_key = True ) name = db.Column( db.String( 24 ), unique = True )

我用Flask SQLalchemy创建了3个模型:用户、角色、用户角色

role.py:

class Role( ActiveRecord, db.Model ):

    __tablename__ = "roles"

    #   Schema
    id = db.Column( db.Integer, primary_key = True )
    name = db.Column( db.String( 24 ), unique = True )
    description = db.Column( db.String( 90 ) )

    users = db.relationship( "User", secondary = "UserRole", \
        backref = db.backref( "roles" ) )
user.py:

class User( db.Model, ActiveRecord ):

    __tablename__ = "users"

    #   Schema
    id = db.Column( db.Integer, primary_key = True )
    email = db.Column( db.String( 90 ), unique = True )
    password = db.Column( db.String( 64 ) )

    #   Relations
    roles = db.relationship( "Role", secondary = "UserRole", \
        backref = db.backref( "users" ) )
用户_role.py:

class UserRole( ActiveRecord, db.Model ):

    __tablename__ = "user_roles"

    #   Schema
    user_id = db.Column( db.Integer, db.ForeignKey( 'users.id' ), primary_key = True )
    role_id = db.Column( db.Integer, db.ForeignKey( 'roles.id' ), primary_key = True )
如果我尝试(在控制台中)通过
User.query.all()
获取所有用户,我会获取
AttributeError:'NoneType'对象没有属性'all'
,如果我再次尝试,我会收到另一个错误消息:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers.  Original exception was: type object 'UserRole' has no attribute 'foreign_keys'

谁能解释一下我到底做错了什么?我想几个月前我的代码运行正常,但最近我更新了SQLAlchemy、Flask和Flask SQLAlchemy,它停止了。这只是一个附带项目。

这里有点难,因为您使用的是一些未知的基类,如“ActiveRecord”等。然而,看起来“次要”论点是错误的:

class User( db.Model, ActiveRecord ):

    __tablename__ = "users"

    #   Schema
    id = db.Column( db.Integer, primary_key = True )
    email = db.Column( db.String( 90 ), unique = True )
    password = db.Column( db.String( 64 ) )

    #   Relations
    roles = db.relationship( "Role", secondary = "UserRole", \
        backref = db.backref( "users" ) )
次要
需要引用一个
对象,而不是一个映射类,如果按字符串名称,那么它将是
用户角色“


发布源代码的部分原因是为了让我们能够尝试重现我们这边的问题。但是,如果我们不知道ActiveRecord是什么,或者您是如何设置试图在其中运行命令的“控制台”,我们就无法做到这一点。有没有一种方法可以创建一个复制问题的脚本?更好的方法是避免硬代码,所以我更喜欢使用:
secondary=lambda:ModelClass.\uuuu table\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    roles = db.relationship( "Role", secondary = "user_roles", \
        backref = db.backref( "users" ) )