为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2022-10-18 17:53:16
我在我的 Python/ArangoDB 后端使用arango-orm(它在后台使用python-arango )。我设置了一个小型测试工具,它使用远程数据库插入测试数据、执行单元测试并再次删除测试数据。我使用 Python for 循环插入我的测试数据。每次迭代,一小部分信息都会基于一个通用对象发生变化,然后我将修改后的通用对象插入 ArangoDB,直到我有 10 个测试对象。但是,在运行该代码之后,我的测试断言告诉我我的数据库中没有存储 10 个对象,而只有 8 个(有时是 3、7 或 9 个)。看起来像pythong-arango异步运行这些查询或ArangoDB在实际插入数据之前已经回复了 OK。任何人都知道发生了什么?当我在插入所有数据后休眠 1 秒时,我的测试运行绿色。这显然不是解决办法。这是我使用的一小段示例代码: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)然后我的数据库在一个单独的模块中像这样创建: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之后,行为保持完全相同。
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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



查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号