首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象的Python ArangoDB插入在方法运行后未完成

对象的Python ArangoDB插入在方法运行后未完成
EN

Stack Overflow用户
提问于 2020-04-23 00:57:36
回答 1查看 95关注 0票数 0

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

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

代码语言:javascript
复制
def load_test_data(self) -> None:
    # This method is called from the setUp() method.
    logging.info("Loading test data...")
    for i in range(1, 11):
        # insertion with data object (ORM)
        user = test_utils.get_default_test_user()
        user.id = i
        user.username += str(i)
        user.name += str(i)
        db.add(user)

        # insertion with dictionary
        project = test_utils.get_default_test_project()
        project['id'] = i
        project['name'] += str(i)
        project['description'] = f"Description for project with the id {i}"
        db.insert_document("projects", project)
    # TODO: solve this dirty hack
    sleep(1)

def test_search_by_user_username(self) -> None:
    actual = dao.search("TestUser3")
    self.assertEqual(1, len(actual))
    self.assertEqual(3, actual[0].id)

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

代码语言:javascript
复制
client = ArangoClient(hosts=f"http://{arango_host}:{arango_port}")
test_db = client.db(arango_db, arango_user, arango_password)
db = Database(test_db)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 20:27:15

在与ArangoDB的人取得联系后,我了解到视图的更新速度不如集合。你给了我一个内部的SEARCH option,它也在等待同步视图。因为它是一个内部选项,只用于单元测试,所以他们强烈反对使用它。对我来说,我只使用它进行单元测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61370748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档