python - 异步更新数据库上的字典
问题描述
所以我是异步编程的新手,但可能我的问题与赛车条件有关。在这种情况下,我将 Odmantic 与 MongoDB 一起使用。
我正在尝试填充数据库以进行测试,所以我有这些数据,例如:
categories = [
{
'name': 'Accessories'
},
{
'name': 'Apparel'
},
{
'name': 'Groceries'
},
{
'name': 'Paints',
'parent': 'Accessories'
},
{
'name': 'Homewares',
'parent': 'Accessories'
},
{
'name': 'Audiobooks',
'parent': 'Accessories'
},
{
'name': 'T-shirts',
'parent': 'Apparel'
},
{
'name': 'Polo Shirts',
'parent': 'Apparel'
},
{
'name': 'Hoodies',
'parent': 'Apparel'
},
{
'name': 'Footwear',
'parent': 'Apparel'
},
{
'name': 'Juices',
'parent': 'Groceries'
},
{
'name': 'Alcohol',
'parent': 'Groceries'
},
]
所以我是这样开始的:
if __name__ == '__main__':
loop = asyncio.get_event_loop()
if argv[1] == 'populate':
loop.run_until_complete(populate())
elif argv[1] == 'clear':
loop.run_until_complete(clear())
loop.close()
我的填充功能:
async def populate():
tasks = []
print('\nPopulating Categories:')
for cat in categories:
task = help_populate_cats(cat)
tasks.append(task)
await asyncio.gather(*tasks)
两个帮手:
async def help_populate_cats(cat):
category = Category(name=cat.get('name'))
await category.create()
await helper_constructor(category)
print(f"{cat.get('name')} added.")
async def helper_constructor(element):
for field in element.translations:
if isinstance(getattr(element, field), str) or not getattr(element, field):
for lang in available_languages:
db_language = await Language.get_language(lang)
if lang == 'en-US':
temp_translations = {f'{element.id}_{field}': getattr(element, field)}
else:
temp_translations = {f'{element.id}_{field}': None}
await db_language.add_strings(temp_translations)
最后是类语言:
class Language(Model, ABC):
prefix: str
strings: Optional[dict] = {}
class Config:
collection = 'languages'
@classmethod
async def get_language(cls, prefix: str) -> "Language":
return await engine.find_one(cls, cls.prefix == prefix)
async def add_strings(self, strings: dict):
self.strings.update(**strings)
# update_strings(self.prefix, self.strings)
await self.save()
async def save(self):
await engine.save(self)
运行此代码后,我的数据库如下所示:
Engine Started
Populating Categories:
Homewares added.
Juices added.
T-shirts added.
Groceries added.
Audiobooks added.
Apparel added.
Paints added.
Polo Shirts added.
Accessories added.
Hoodies added.
Alcohol added.
Footwear added.
我有其他项目,如产品类型和属性,它像随机填充数据库(语言部分,创建类别工作正常),有些东西进入其他没有,但如果我在 add_strings 方法上打印,一切都会出现那里(在印刷品上,而不是在数据库上)。
解决方案
我已经切换了计算机和网络,它工作正常,我随机发现,所以我猜代码是好的。
推荐阅读
- r - 将具有多个唯一单词的列中的每一行拆分为多个列
- django - 您将如何处理为检查对象是否有效的方法创建响应?
- python - 如何使用 RDFLIB 将多边形坐标存储为 WKT 文字值?
- c# - 如何从 asp.net 锁定工作站?
- python - 如何将 JSON 的一部分提取为另一个 JSON,并在 Python 上将它们分开几个 JSON 文件
- azure-devops - 如何在 AzureDevops 中使用工件从一个作业构建管道到另一个作业
- kotlin - 从变量传递类型
- java - Java 和 .NET C# 的 XSD 1.1 验证?
- oracle - Oracle 多租户 - 在另一个容器中通过 DBMS_SQL 执行 PL/SQL
- ios - Collection View Xib Cell Bug 中的表视图