[英]marking columns in sqlalchemy tables
我想在sqlalchemy模型中的列中添加自定義屬性“searchable”。 目的是僅為這些列提取數據(使用ModelFoo .__ table __。columns)並將數據放入solr。 有沒有辦法可以使用自定義屬性標記某些列?
class ModelFoo(AppBase):
__tablename__ = 'foo'
id = Column("id", Integer, primary_key=True, autoincrement=True)
os = Column(String, nullable=False, searchable=True)
platform = Column(String, searchable=True)
默認情況下,當我嘗試上述操作時出現以下錯誤:
sqlalchemy.exc.ArgumentError: Unknown arguments passed to Column: ['searchable']
我正在尋找一種通用的方法來向solr添加“可搜索”列,這些內容如下:
for table in Base.metadata.tables.values():
keys = [str(key) for key in table.columns if key.searchable]
solr.add(session.query(*keys).all())
在上面的代碼中,我正在尋找一些簡短的解決方案或替代方案來使“key.searchable”工作。 希望這澄清了這個問題。
我使用模型中的單獨屬性解決了這個問題:
class ModelFoo(Base):
__tablename__ = 'foo'
id = Column("id", Integer, primary_key=True, autoincrement=True)
os = Column(String, nullable=False)
platform = Column(String)
search_cols = ["os", "value"]
for k, v in list(Base._decl_class_registry.items()):
if (hasattr(v, "search_cols")):
cols = [getattr(v, val) for val in v.search_cols]
query = sess.query(*cols)
solr.add(query.all())
我對你的問題有點不清楚,但看起來你正試圖通過你提供的鏈接做這樣的事情:
si.add(Book.objects.all())
其中Book.objects.all()
是來自ORM映射表的記錄列表。 請注意,文檔說對象列表也是可以接受的。 我認為這里的解決方案是使用SQLAlchemy查詢方法來構建只包含所需字段的記錄。 使用您的示例將如下所示:
si.add(session.query(ModelFoo.os, ModelFoo.platform).all())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.