在googleappengine中,如何配置散货装载机.yaml处理模型上的可选外键?

2024-09-28 01:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序内的模型引擎,我以CSV格式导出,然后使用应用程序配置文件以及散货装载机.yaml. 在

我可以导入和导出大多数模型,但我有一个问题,模型的外键并不总是存在。我可以使用下面的lambda导入始终将外键作为None导入,或者在csv文件中的每一行都有外键时使用create_foreign_key()转换导入外键。在

如何配置bulkloader.py当外键存在时导入外键,而不存在时忽略它?在

- kind: MyModel
  connector: csv
  connector_options:
  property_map:
    - property: myOtherModel
      external_name: myOtherModel
      import_transform: "lambda x: x is None and None or None"
      #import_transform: transform.create_foreign_key('MyOtherModel', key_is_id=True)
      export_transform: transform.key_id_or_name_as_string

只要取消注释第二个import_transform来代替lambda转换,就会产生这个错误。在

^{pr2}$

运行时发生此错误应用程序配置文件. 所有其他没有外键或始终存在外键的导入都正常工作。在

appcfg.py upload_data --config_file=bulkloader.yaml --num_threads=1 --batch_size=50 --url=http://localhost:8080/remote_api --email=Chris --passin --kind=MyModel --filename=MyModel.csv

csv文件中的myOtherModel列有时包含MyOtherModel.key().id(),有时不包含。在

例如

myOtherModel
1234
4567

2345

5678

Tags: 文件csvlambdakey模型importnoneid
2条回答

foreign key值不存在时,reference property取值:None并为此编写代码:

import_transform: transform.create_foreign_key('MyOtherModel')

如您的错误消息所示:value does not exist显示您使用 'othercolumn','','anohtercolumn'而不是{}

因此,如果源“”要处理此问题:

从这个链接:http://eikke.com/python-ifelse-in-lambda/ 正如Thomas Thurman所言,lambda表达式应该如下所示:

^{pr2}$

我希望对你有用

解决这一问题的一种方法是:

  1. 导入所有没有键的实体散货装载机.yaml没有为模型指定键属性导入转换。

  2. 导出所有实体。

  3. 导入实体。(所有这些现在都有键值)

一个稍微好一点的变化:

  1. 使用散货装载机.yaml使用键属性导入转换。

  2. 使用散货装载机.yaml没有键属性导入转换。

这有点麻烦。我想有一种方法,让实体丢失一个键值自动分配一个导入。在

相关问题 更多 >

    热门问题