我有两个名为users
和permissions
的表,我想用一个名为userPermissions
的表在它们之间创建一个关系。我的代码是这样的:
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) first_name = Column(Text) last_name = Column(Text, nullable=True) class Permission(Base): __tablename__ = 'permissions' id = Column(Integer, primary_key=True) title = Column(String(64)) allow_anonymous = Column(Boolean) class UserPermission(Base): __table__ = 'userPermissions' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id')) permission_id = Column(Integer, ForeignKey('permissions.id')) value = Column(Boolean)
我知道我可能是在错误地处理人际关系,但通过查阅文档和搜索,我找不到它是什么。当我尝试使用db.Base.metadata.create_all(db.engine)
创建表时,会出现以下错误:
问题出在哪里?在
在您的
UserPermission
类中,您使用了错误的dunder属性:应该是:
^{pr2}$Sqlalchemy正在尝试将字符串
'userPermissions'
视为Table
对象。在关于}。它表示对象应该引用该名称的表,SQLAlchemy可以在内部处理
__table__
和__tablename__
之间的区别,大多数情况下只需要在声明类上声明{Table
对象的构造。在在对象上声明一个
__table__
,而是向SQLAlchemy发出信号,表示您想要控制ORM类所表示的Table
的构造。如果您已经通过其他方式(如表反射)引用了表,那么这将非常有用。更多阅读here。在应该是:
^{pr2}$相关问题 更多 >
编程相关推荐