我用Flask-SQLalchemy创建了3个模型:User,Role,UserRole
user.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" ) )
role.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" ) )
user_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' 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" ) )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句