问题标签 [python-arango]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
967 浏览

python-3.x - UPSERT 与用于 ArangoDB 的 python-arango 驱动程序

我正在使用python-arango作为 ArangoDB 的驱动程序,似乎没有UPSERT接口。

我打算用 python-arango标记它,但我没有足够的代表来创建新的 tags

我正在使用如下所示的功能进行管理,但我想知道是否有更好的方法来做到这一点?

请注意,在我的情况下,我确保所有文档_key在插入之前和之前都有一个值,因此我可以假设这成立。如果其他人想使用它,请相应地修改。

编辑:删除了_id字段的使用,因为这对问题不是必需的。

0 投票
0 回答
243 浏览

python - Transactional Update and Removal of documents in ArangoDB

Given the following document structure:

I need to iterate over the documents and remove some of the traits based on criteria. A document with all traits removed should be removed as well.

Finally, I need to keep track of how many traits and documents were removed.

The update and removal operations should not be blocking and may be executed while these documents are being updated or queried.

I have implemented this in python using python-arango by using an update/replace query to remove traits and a remove query to remove documents without traits by executing the following queries:

I then pull statistics from each returned cursor:

The problem is I need to prevent the possibility that a lookup query initiated during the execution of the above process returns a document with an empty traits object, before the 2nd query (i.e. remove query) is complete.

I tried implementing a transaction then pulling job cursor stats post commit like this:

but the cursors of the transaction jobs are empty. I suppose that's because ArangoDB executes transaction as a single Javascript function.

I could filter out empty traits on all lookup queries, but it would be better if I could execute the above removal/update operations either in a single query (impossible in ArangoDB per documentation), or in a transaction (no execution stats?).

Any suggestions?

Thanks in advance!

0 投票
1 回答
114 浏览

python - 运行方法后未完成对象的 Python ArangoDB 插入

我在我的 Python/ArangoDB 后端使用arango-orm(它在后台使用python-arango )。我设置了一个小型测试工具,它使用远程数据库插入测试数据、执行单元测试并再次删除测试数据。我使用 Python for 循环插入我的测试数据。每次迭代,一小部分信息都会基于一个通用对象发生变化,然后我将修改后的通用对象插入 ArangoDB,直到我有 10 个测试对象。但是,在运行该代码之后,我的测试断言告诉我我的数据库中没有存储 10 个对象,而只有 8 个(有时是 3、7 或 9 个)。看起来像pythong-arango异步运行这些查询或ArangoDB在实际插入数据之前已经回复了 OK。任何人都知道发生了什么?当我在插入所有数据后休眠 1 秒时,我的测试运行绿色。这显然不是解决办法。

这是我使用的一小段示例代码:

然后我的数据库在一个单独的模块中像这样创建:

编辑:我没有在创建集合时将该sync属性放入true,但是在更改集合并将其设置为true之后,行为保持完全相同。

0 投票
1 回答
274 浏览

graph-databases - 如何使用 python-arango 在 arangodb 中插入带有变量的数据

我尝试从变量中插入数据,但找不到这样做的方法,有人可以帮我吗?像这样的东西:

谢谢!

0 投票
1 回答
121 浏览

graph-databases - ArangoDB 加入边缘集合

我有 1 个节点和两个边缘集合。我想编写一个 AQL 查询来查找两个边缘集合之间的公共节点。我如何加入两个边缘集合,因为 2 个边缘集合中没有要查询的公共字段。当我试图查找节点时,公共节点 ID 可以存在是_from_to字段

假设我在 2 个不同的边缘集合中有 2 个边缘,如下所示: Edge-1 : _from: A1 _to: B1 Edge-2 : _from: B1 _to: C2

输出将是B1因为它在两个边缘集合中很常见

0 投票
1 回答
338 浏览

python - 从 python 脚本容器调用 ArangoDB docker 容器失败

我有一个 dockerized 的 python 脚本,在脚本中我调用了 ArangoDB。我有另一个运行 ArangoDB 映像的容器。当我运行这两个容器时,我可以在我的本地主机上访问 ArangoDB,如果我从其容器外部运行我的 python 脚本,它可以成功调用 ArangoDB。但是,当我从 docker 容器内运行脚本时,它无法连接到容器化的 ArangoDB,因为它没有识别出服务器已启动并正在运行,我收到以下错误:

这是我用于 python 脚本的 dockerfile

这就是我从我的 python 脚本中调用 ArangoDB 的地方:

最后,这是我的 docker-compose.yml

0 投票
2 回答
107 浏览

python-3.x - 在嵌套字典中查找和转换值并更新数据库集合

我已经使用 xmltodict 将许多 xml 文件转换为 json 并将它们插入到 arangodb 中。现在我很好地遍历集合并更改数据库中的一些值。就像从字符串到 int 的 day、mount 和 year。文档可以非常嵌套,我更改的值可以在不同的地方。

这就是我所拥有的代码。

代码运行但它不会更新数据库,并且我收到的已更改文档只是集合中的最后一个文档。我必须在代码中进行哪些更改才能将键中的值(如 day、mount 和 year)转换为 int?

编辑:这是嵌套 json 的文档之一。我很好更新

0 投票
0 回答
43 浏览

python - 客户端请求数据时,为什么简单的 aql 执行返回 AsyncJobResultError?

简单的 aql 执行查询过于频繁地返回此错误。

有时它会返回数据,有时它不会在抛出错误时返回。

示例查询如下。

0 投票
1 回答
156 浏览

python - AQL Upsert 性能 ArangoDB 与 python-arango

我正在使用 paython-arango 和 aql 查询对多个项目(大约 20 - 30k)的 UPSERT 语句进行试验。总的来说,无论如何,与 NodeJS 相比,这种方法在 python 中似乎要慢得多,但我尝试了两种不同的方法,令人惊讶的是,我认为它的速度要慢得多,我试图理解为什么。

我最初的方法是用这样的语句单独更新每个项目:

正如我之前所说,这比 NodeJS 中的类似 NodeJS 脚本要慢,这可能是因为 NodeJS 是异步工作的。总共大约 45 秒 für 27k 条目(2.4 MB csv-dump)。这么少的数据花了很多时间。

然后我想,一个一个可能是问题所在,最好将每个查询的多个项目发送到数据库,如下所示:

但实际上,情况更糟。可能需要 5 分钟,ArangoDB-Backend 的速度非常慢,并且在短时间内甚至无法访问。

我很好奇:为什么一个单独的(好吧,我使用了 2、10、50、100 个项目但没有效果的批次)aql 语句与 FOR 比 27k 单独请求慢得多?我预计不是这样。有没有更好的方法一次执行多个 UPSERT(使用 Python)?

它是具有 2 个内核和 16 GB RAM 的 Windows 系统。阅读成绩不错,但写作...

0 投票
1 回答
82 浏览

kubernetes - 通过 Python 连接托管在 Kubernetes pod 上的 ArangoDB 集群

我有一个 3 节点系统,在该系统上我托管了一个具有 3 个数据库服务器的基本 ArangoDB 集群。我正在使用 Python-arango 库,它表示要连接到集群,我们需要向 ArangoClient 类提供端口为 8529 的 IP 列表。我的 Python 代码在不同的 pod 中运行。

使用 Arangosh,我可以使用 localhost:8529 配置访问协调器 pod。但是,在 Arangosh 上,我一次只能访问一个协调器 pod。由于 Arango 安排是一个集群,我想以循环方式一次连接到所有三个协调器 pod。现在根据MongoDB的 Kubernetes 文档,我可以将 <pod_name.service_name> 的列表提供给 MongoClient 并且它会连接起来。我正在尝试与 Arango 协调器 pod 类似的东西,但这似乎不起作用。Arango 文档中的示例仅指向编写“localhost-1”、“localhost-2”等。

总而言之,手头的问题是我不知道如何识别 Arango 协调器 pod 的 IP。我尝试使用协调器的内部 IP,尝试使用http://pod_name.8529,并尝试使用 Web UI 中显示的协调器的端点(以 ssl 开头,但我已将 ssl 替换为http),但没有成功。

将不胜感激在这方面的任何帮助。如果需要一些额外的信息,请告诉我。自从一个星期以来,我一直被这个问题困扰。