我尝试使用MySQL上的SQLAlchemy为受到unix风格的rwx位启发的用户实现访问系统。为了便于阅读,我决定使用python enum.IntEnum
作为值(1,2,4)。将它们存储在SmallInteger
列中似乎也按预期工作。
但是,要过滤掉匹配的访问权限,请使用像
这样的过滤器表达式.filter(Access.mode.op('&')(AccessMode.WRITE) == AccessMode.WRITE)
其中AccessMode
是IntEnum
子类,mode
是SmallInteger
列。在这种情况下,SQLAlchemy与
AttributeError: 'AccessMode' object has no attribute 'translate'
我不太明白,因为我认为IntEnum
属性(大部分)总是表现得像实际的int
。
为了尝试发生的事情,我为这种类型实现了translate()
方法,只返回str(self).translate(...)
。现在SQLAlchemy没有抛出任何错误,但也没有对结果应用预期的过滤(我完全接受,因为我不知道应用了内部算法)。
解决方法是手动将所有内容都转换为int
,但这并不是很好。有没有人知道如何以更好的方式做到这一点?
提前致谢!