gpt4 book ai didi

sqlalchemy - sqlalchemy 中的 tsvector

转载 作者:行者123 更新时间:2023-12-04 16:40:15 38 4
gpt4 key购买 nike

我一直在寻找一种在 sqlalchemy 中使用 tsvector 的方法(就像 INTEGER 等其他方法一样),但到目前为止我还不清楚如何做到这一点。我读过可以使用 UserDefinedType 将 tsvector 实现为类型.经过一些尝试,我一无所获,有人有一个简单的方法来做到这一点吗?谢谢

最佳答案

如果您希望 SQLAlchemy 能够使用 tsvector 类型创建模式并仅检索查询中的序列化值,这就是您所需要的:

from sqlalchemy import types
class tsvector(types.TypeDecorator):
impl = types.UnicodeText

@compiles(tsvector, 'postgresql')
def compile_tsvector(element, compiler, **kw):
return 'tsvector'
tsvector像常规类型一样工作,您可以在表定义中使用它。 (我忘记了我在哪里找到的片段,可能在 SQLAlchemy 邮件列表或 wiki 上。)

如果您需要实际解析 tsvector 数据,则稍微复杂一些。最新版本的 hstore 支持可能是一个很好的例子。但是,您可能会发现以下代码段也很有用。这是已知可以工作的旧代码,是用 pyparsing 编写的:
from pyparsing import ParserElement, QuotedString, Regex, Group, Suppress, Group, delimitedList, ZeroOrMore, StringEnd
ParserElement.enablePackrat()
lexeme = QuotedString("'")
occurrence_marker = Regex('[1-9][0-9]*[A-D]?')
atom = Group(lexeme('lexeme') + Suppress(':') + Group(delimitedList(occurrence_marker))('markers'))('atom')
tsvector = ZeroOrMore(atom) + StringEnd()
parse_tsvector = tsvector.parseString

更新:

要查询 tsvector 列,请使用 .op()像这样的方法:
session.query(Model).filter(Model.tsvector.op('@@')(func.plainto_tsquery('search string')))

关于sqlalchemy - sqlalchemy 中的 tsvector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13837111/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com