Python ArangoDB 在方法 运行 后未完成对象插入
Python ArangoDB insertion of objects not completed after method is run
我在我的 Python/ArangoDB 后端使用 arango-orm (which uses 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
后,行为保持完全相同。
和ArangoDB的人接触后,我了解到视图的更新速度不如集合。 Thye 给了我一个内部 SEARCH option
,它也在等待同步视图。由于它是一个内部选项,仅用于单元测试,因此他们强烈反对使用它。对我来说,我只用它来进行单元测试。
我在我的 Python/ArangoDB 后端使用 arango-orm (which uses 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
后,行为保持完全相同。
和ArangoDB的人接触后,我了解到视图的更新速度不如集合。 Thye 给了我一个内部 SEARCH option
,它也在等待同步视图。由于它是一个内部选项,仅用于单元测试,因此他们强烈反对使用它。对我来说,我只用它来进行单元测试。