6

特别是我想调用 Postgreslevenshtein函数。我想编写 blaze 查询以返回与单词“similar”相似的单词,即相当于:

select word from wordtable where levenshtein(word, 'similar') < 3;

在 Blaze 中,这应该看起来像

db.wordtable.word[levenshtein(db.wordtable.word, 'similar') < 3]

但未levenshtein在我在 python 端导入的任何模块中定义。在哪里/如何获得levenshtein在 Python 端的 Blaze 表达式中使用的定义?


我找到了sqlalchemy.sql.func为 SqlAlchemy 使用的 SQL 函数提供 Python 句柄的包,但这些在 Blaze 表达式中不起作用。是否有等效的 Blaze 包,或者我如何sqlalchemy.sql.func.levenshtein在 Blaze 表达式中使用?

4

3 回答 3

2

PyPi是你的朋友。在那里搜索找到了python-Levenshtein 包。如果您在 Windows 上并且想要预编译版本,请使用Christoph Gohlke 的轮子(他的构建安全、可靠且正确;numpy 构建使用 MKL 库,所以它们也很快!)。

于 2016-11-30T06:15:28.460 回答
1

如果您希望查看这些单词并对它们执行一些简单的操作,您可以尝试从 Postgres 查询中将过滤后的数据加载到 Blaze。

from blaze import data
import sqlalchemy as sa

engine = sa.create_engine('postgresql://...')
result = engine.execute('''select word from wordtable where levenshtein(word, 'similar') < 3;''')
rows = result.fetchall()
wordtable = data(rows)

# Now you may work with wordtable as a blaze table
wordtable[wordtable.word.like('a*')]  # all words starting with 'a'
于 2016-12-05T10:48:52.937 回答
1

Blaze 只是一个前端;并重组,然后将查询提供给 SQL 后端,后者从您的数据库中收集数据。

从独库

哪些操作适用于 SQL 数据库?大多数表格操作,但不是全部。SQLAlchemy 翻译是一个高优先级。失败包括数组操作,如切片和点积在 SQL 中没有意义。此外,SQLAlchemy 还不能很好地支持一些操作,如日期时间访问。最后,一些数据库,如 SQLite,对 sin 等常见数学函数的支持有限。

Blaze 旨在忘记后端,并为所有后端提供相似/相同的语法。因此它只支持常用操作。在我看来,不可能为 blaze 指定 sqlalchemy 或 postgresql 函数,因此我认为目前还不可能。

...但是blaze 有 0.10 版,它是一种在去年积极贡献的 beta 版。我有信心,这将在一段时间内实施。您始终可以在发行说明中跟踪更改。

补充:为了进一步解释 SQL 中的 UDF(用户定义的函数)并在 blaze 中使用它们,请比较beldaz 提供的链接(与这个问题非常相似)。

于 2017-01-10T12:51:19.050 回答