【发布时间】:2017-09-11 19:44:35
【问题描述】:
我想在烧瓶中定义一个多对多关系。 (这两个模型是User 和Role。后来我想将它们用于Flask-Security。)所以我关注http://flask-sqlalchemy.pocoo.org/2.1/models/#many-to-many-relationships 并写道
class User(db.Model, UserMixin):
__tablename__ = 'user'
__table_args__ = { 'useexisting': True }
id = Column(Integer, primary_key=True)
roles = relationship("RolesUsers", backref=db.backref("user", lazy='dynamic'))
class Role(db.Model):
__tablename__ = 'role'
__table_args__ = { 'useexisting': True }
id = Column(Integer, primary_key=True)
name = Column(String(80), unique=True)
class RolesUsers(db.Model):
__tablename__ = 'roles_users'
__table_args__ = { 'useexisting': True }
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
role_id= Column(Integer, ForeignKey('role.id'), primary_key=True)
但我得到了错误
在此注册表中找到路径“RolesUsers”的多个类 声明性基础。请使用完全模块限定的路径。
我发现那行
roles = relationship("RolesUsers", backref=db.backref("ma_user", lazy='dynamic'))
似乎对此负责。
你可能会问我为什么使用
__table_args__ = { 'useexisting': True }
那是因为否则我得到错误
已经为此 MetaData 实例定义了表“用户”。指定 'extend_existing=True' 重新定义现有的选项和列 表格对象。
也许这两个错误是挂在一起的?在我看来,该类似乎以某种方式被多次调用。但我不知道那是怎么来的。那么我该如何修复呢?
【问题讨论】:
-
您似乎有多个类似的类定义。您是正确的,必须扩展存在是您的情况的一种症状。
标签: python sqlalchemy