【发布时间】:2023-03-30 13:53:02
【问题描述】:
我遇到了 python SQLAlchemy 单表继承问题。
型号:
class User(Base):
__tablename__ = 'user'
userID = Column(String(64), primary_key=True)
name = Column(String(64))
type = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': type}
class PasswordUser(User):
__mapper_args__ = {'polymorphic_identity': 'puser'}
password = Column(String(64))
def validatePassword(self, password):
return (self.password == password)
在 userManger.py 我有这个:
def userGet(userID):
with DBStore.Session(db) as sess:
user = sess.query(User).filter(User.userID==userID).one()
sess.expunge(user)
return user
在测试主方法中:
myUser = userManager.userGet('123')
myUser.validatePassword("password321')
这会产生错误:
sqlalchemy.orm.exc.DetachedInstanceError:实例未绑定到会话;属性刷新操作无法进行
我已验证 myUser 的类型为“PasswordUser”,并且它调用了正确的“validatePassword”方法。
奇怪的是,当我慢慢地单步执行代码(PyDev)时,它可以正常工作。
如果我的 userGet 方法执行 sess.query(PasswordUser),它也可以工作。但我希望这个方法是通用的,所以它可以返回任何类型的“用户”。
有什么想法吗?
【问题讨论】:
标签: python inheritance sqlalchemy