gpt4 book ai didi

python - 如何使用 sqlite 后端为 python blaze 提供用户定义的函数?

转载 作者:IT王子 更新时间:2023-10-29 06:28:24 27 4
gpt4 key购买 nike

我使用 Blaze 连接到 sqlite 数据库 df = bz.Data("sqlite:///<mydatabase>)一切正常,但我不知道如何在与 df 的交互中提供用户定义的函数。我在 df 中有一个名为 IP 的列,它是包含 IP 地址的文本。我还有一个 toSubnet (x, y) 函数,它接收文本格式的 IP 地址 (x) 并返回其/y 子网。例如:

out = toSubnet('1.1.1.1',24)
out
1.1.1.0/24

现在如果我想将所有 IP 映射到它们的/14 子网,我使用:

df.IP.map(lambda x:toSubnet(x,14),'string')

后端为 CSV 时有效。但是使用 sqlite 后端我得到 NotImplementedError .这里有什么问题吗?

最佳答案

注意:这并没有告诉您如何准确地执行您想要的操作,但它解释了为什么它不起作用以及可能的下一步让它与 SQLite 一起工作。

您遇到的问题是很难针对任意 SQL 数据库有效地执行任意 Python 代码。

Blaze 使用 SQLAlchemy 获取用户代码并尽可能将其转换为 SQL,我认为 SQLAlchemy 没有办法做到这一点。

由于几乎每个数据库都有不同的处理用户定义函数 (UDF) 的方式,因此构建允许执行以下操作的 API 需要大量工作:

  1. 用户在 Python 中定义一个函数
  2. 将该纯 Python 函数转换为数据库原生的 UDF。

也就是说,SQLite 的 Python 接口(interface)有一种方法可以注册可以在 SQL 语句中执行的 Python 函数:

https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.create_function

目前还没有一种方法可以通过使用 SQL 后端的 Blaze 来表达 UDF,尽管这可以实现为新的表达式类型,允许用户通过底层数据库的 db API 注册函数。

关于python - 如何使用 sqlite 后端为 python blaze 提供用户定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33448217/

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