Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Google App Engine中,如何配置bulkloader.yaml来处理模型上的可选外键?_Python_Google App Engine_Foreign Keys_Bulkloader - Fatal编程技术网

Python 在Google App Engine中,如何配置bulkloader.yaml来处理模型上的可选外键?

Python 在Google App Engine中,如何配置bulkloader.yaml来处理模型上的可选外键?,python,google-app-engine,foreign-keys,bulkloader,Python,Google App Engine,Foreign Keys,Bulkloader,我有一个应用程序引擎中的模型,我以CSV格式导出,然后使用appcfg.py和bulkloader.yaml导入到我的本地开发环境中 我可以导入和导出大多数模型,但对于外键不总是存在的模型,我遇到了一些问题。我可以使用下面的lambda导入始终将外键作为None导入,或者在我的csv文件中的每一行都有外键时,使用create\u foreign\u key()转换导入外键 如何配置bulkloader.py在外键存在时导入外键,在外键不存在时忽略外键 - kind: MyModel conn

我有一个应用程序引擎中的模型,我以CSV格式导出,然后使用appcfg.py和bulkloader.yaml导入到我的本地开发环境中

我可以导入和导出大多数模型,但对于外键不总是存在的模型,我遇到了一些问题。我可以使用下面的lambda导入始终将外键作为
None
导入,或者在我的csv文件中的每一行都有外键时,使用
create\u foreign\u 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\u变换
而不是lambda变换,就会产生此错误

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/bulkload/transform.py", line 127, in generate_foreign_key_lambda
    value = int(value)
ValueError: invalid literal for int() with base 10: ''
运行appcfg.py时发生此错误。没有外键或外键始终存在的所有其他导入都正常工作

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()
,有时不包含

例如


默认情况下,
外键
值不存在时,
引用属性
取值:
,此代码:

import_transform: transform.create_foreign_key('MyOtherModel')
如错误消息中所示:
值不存在
显示您使用
'othercolumn'、''、'anohtercolumn'
而不是
'othercolumn'、'anohtercolumn'

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

通过此链接: 正如Thomas Thurman所评论的,lambda表达式应该如下所示:

import-transform: "lambda x: [x, None][x=='']"

我希望它对您有用

处理此问题的一种方法是:

  • 使用未为模型指定键属性导入转换的bulkloader.yaml导入所有没有键的实体

  • 导出所有实体

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

  • 在这方面有一个稍好的变化:

  • 使用bulkloader.yaml和键属性导入转换导入具有键的所有实体

  • 使用bulkloader.yaml导入所有没有键的实体,而不使用键属性导入转换


  • 这有点麻烦。我想找到一种方法,在导入时自动为缺少键值的实体分配键值。

    否。这就是问题所在。使用transform.create\u foreign\u key()行将导致我刚才添加的错误。它们匹配。如果我在MyModel的CSV文件中为每个MyThermodel外键属性的列中添加一个id,那么一切都会正常工作。似乎我没有得到默认的无选项。好的。谢谢你的努力。你能帮我正确地写这行吗?lambda x:int(x)>0和x或“创建外键”问题似乎是由于某种原因,bulkloader进程试图将空白“”解析为int。这就是为什么我尝试只执行lambda表达式,以便捕获不存在的外键并防止错误。感谢您指出其他StackOverflow问题。我已经看过了,但都没有涉及归还钥匙。当列中存在数字时,我需要能够返回create_foreign_key(),但找不到语法。
    import-transform: "lambda x: [x, None][x=='']"