Flask-SQLAlchemy - 模型没有属性“foreign_keys”

2024-01-06

我用 Flask-SQLalchemy 创建了 3 个模型:User、Role、UserRole

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" ) )

用户角色.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() I get AttributeError: 'NoneType' object has no attribute '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" ) )

secondary需要参考一个Table对象,而不是映射的类,如果通过字符串名称那么它将是"user_roles":

    roles = db.relationship( "Role", secondary = "user_roles", \
        backref = db.backref( "users" ) )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-SQLAlchemy - 模型没有属性“foreign_keys” 的相关文章

随机推荐