SQLAlchemy:在filter()中使用IntEnum破坏了op()?

时间:2017-10-19 18:06:41

标签: python-3.x enums sqlalchemy

我尝试使用MySQL上的SQLAlchemy为受到unix风格的rwx位启发的用户实现访问系统。为了便于阅读,我决定使用python enum.IntEnum作为值(1,2,4)。将它们存储在SmallInteger列中似乎也按预期工作。

但是,要过滤掉匹配的访问权限,请使用像

这样的过滤器表达式
.filter(Access.mode.op('&')(AccessMode.WRITE) == AccessMode.WRITE)

其中AccessModeIntEnum子类,modeSmallInteger列。在这种情况下,SQLAlchemy与

崩溃
AttributeError: 'AccessMode' object has no attribute 'translate'

我不太明白,因为我认为IntEnum属性(大部分)总是表现得像实际的int

为了尝试发生的事情,我为这种类型实现了translate()方法,只返回str(self).translate(...)。现在SQLAlchemy没有抛出任何错误,但也没有对结果应用预期的过滤(我完全接受,因为我不知道应用了内部算法)。

解决方法是手动将所有内容都转换为int,但这并不是很好。有没有人知道如何以更好的方式做到这一点?

提前致谢!

0 个答案:

没有答案