gpt4 book ai didi

python - 具有自定义属性的 AppEngine bulkloader 导出模型

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:25 25 4
gpt4 key购买 nike

我想使用 bulkloader 下载具有一些自定义属性的模型中的所有实体。

如果我这样定义一个模型,

class MyType:
def __init__(self, arg):
self.name = arg['name']
self.id = arg['id']

class MyProperty(db.Property):
def get_value_for_datastore(self, instance):
val = super(MyProperty, self).get_value_for_datastore(instance)
if type(val) == dict:
val = MyType(val)
return pickle.dumps(val)

def make_value_from_datastore(self, val):
return None if val is None else pickle.loads(str(val))

class MyModel(db.Model):
info = MyProperty()

那么我如何使用批量加载器下载 MyModel,这样文件中就不会有未腌制的值?我想我应该在 bulkloader.yaml 中为 info 定义 export_transform,但我不知道它应该是什么样子。

transformers:
- kind: MyModel
connector: csv
property_map:
- property: __key__
external_name: log_id
export_transform: transform.key_id_or_name_as_string
- property: info
external_name: info
export_transform: ### HERE ###

我看过 transform.py但仍然不知道它是如何工作的。请告诉我任何可以解决我的问题的方法。谢谢。

最佳答案

好吧,我正在回答我自己的问题......

我仍然不知道为什么 pickle 不起作用,但是在更改为使用 simplejson 而不是 pickle 之后,我可以成功以指定格式导出MyProperty

bulkloader.yaml 可能如下所示。

python_preamable:
- import myutils
- import django.utils.simplejson
...

transformers:
- kind: MyModel
connector: csv
property_map:
...
- property: info
external_name: info
export_transform: myutils.load_info

在 myutils.py 中,load_info 可能看起来像这样。

def load_info():
def load(x):
if not x:
return ''
info = simplejson.loads(x)
return '%s-%s' % (info['id'], info['name']) # the output format for info
return load

关于python - 具有自定义属性的 AppEngine bulkloader 导出模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com