簡體   English   中英

標記sqlalchemy表中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM