Properties 是否可以用额外属性标记elixir/sqlalchemy字段/列?

Properties 是否可以用额外属性标记elixir/sqlalchemy字段/列?,properties,tags,sqlalchemy,python-elixir,Properties,Tags,Sqlalchemy,Python Elixir,我想将实体中的一些列标记为可搜索的——理想情况下是以干净的方式,基于每列。是否可以“标记”,或向类中的列定义添加属性?在代码的其他地方,我希望能够在不知道具体是什么类的情况下,在任何实体上检索到可搜索的列 例如: 显然,上面的例子不起作用——但有没有办法做到这一点?我不是这方面的专家,几天的搜索/doc拖网没有发现任何有用的东西。Monkeypatching是有效的(至少在sqlalchemy声明性模型中,我没有用Elixir尝试过),尽管它让你暴露了Monkeypatching的所有标准问题(

我想将实体中的一些列标记为可搜索的——理想情况下是以干净的方式,基于每列。是否可以“标记”,或向类中的列定义添加属性?在代码的其他地方,我希望能够在不知道具体是什么类的情况下,在任何实体上检索到可搜索的列

例如:

显然,上面的例子不起作用——但有没有办法做到这一点?我不是这方面的专家,几天的搜索/doc拖网没有发现任何有用的东西。

Monkeypatching是有效的(至少在sqlalchemy声明性模型中,我没有用Elixir尝试过),尽管它让你暴露了Monkeypatching的所有标准问题(最主要的一点是,不能保证您对bar的修改保持不变)。但它基本上是有效的,如果您的应用程序非常简单,它可能是一个可行的解决方案

class Foo(Entity):
    bar = Field(Integer, default=-1)
    bar.searchable = True
如果您的应用程序更复杂,并且/或者它需要在很长一段时间内由许多人进行健壮/可靠/可维护,那么上述技术不是可行的方法。理想情况下,您希望引入一些其他对象来存储这些附加信息,一个完全在您的控制范围内的对象,而不是受所有幕后操作的支配sqlalchemy不支持数据模型类

为此,有很多方法。一个简单的选择就是创建一个简单的结构,该结构将保存附加信息(布尔“searchable”属性和您可能要添加的任何其他内容),以便在需要时可以轻松查找。例如,定义一个使用嵌套dict()的非常简单的类s存储按模型类、字段名和属性名索引的任意数量的附加属性。然后创建此类的单个实例,并在整个应用程序中共享

建立了这样一个结构后,您可以像这样使用它:

if extra_props[foo]['bar']['searchable']:
    # do something
if extra_props[foo]['bar']['searchable']:
    # do something