SQLAlchemy“AttributeError:'str'对象没有属性'c'”

2024-10-01 11:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个名为userspermissions的表,我想用一个名为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)创建表时,会出现以下错误:

^{pr2}$

问题出在哪里?在


Tags: keytextnameidtruepermissionsbasecolumn
2条回答

在您的UserPermission类中,您使用了错误的dunder属性:

__table__ = 'userPermissions'

应该是:

^{pr2}$

Sqlalchemy正在尝试将字符串'userPermissions'视为Table对象。在

关于__table____tablename__之间的区别,大多数情况下只需要在声明类上声明{}。它表示对象应该引用该名称的表,SQLAlchemy可以在内部处理Table对象的构造。在

在对象上声明一个__table__,而是向SQLAlchemy发出信号,表示您想要控制ORM类所表示的Table的构造。如果您已经通过其他方式(如表反射)引用了表,那么这将非常有用。更多阅读here。在

class UserPermission(Base):
    __table__ = 'userPermissions'

应该是:

^{pr2}$

相关问题 更多 >