2013-02-19 81 views
0

datastore viewer如何在使用bulkloader时在appengine中填充“ID”字段?

更新时间:见下文

我想通了如何获取我的数据集填写项名称字段,以便我现在已经减少2写入OPS(8下)。但我仍然有这个额外的空列“ID”。我曾尝试bulkloader.py的各种配置,但我无法填充该列,并希望减少我写OPS进一步下跌...

这是我有:

python_preamble: 
- import: base64 
- import: re 
- import: google.appengine.ext.bulkload.transform 
- import: google.appengine.ext.bulkload.bulkloader_wizard 
- import: google.appengine.ext.db 
- import: google.appengine.api.datastore 
- import: google.appengine.api.users 

transformers: 

- kind: Word 
    connector: csv 

    property_map: 
    - property: __key__ 
     external_name: word 
     export_transform: transform.key_id_or_name_as_string 

    - property: ID 
     external_name: ID 
     # How to configure this one to use up that silly empty column called "ID"? 

    - property: otherlangs 
     external_name: otherlangs 

这里是头我的csv文件和一些示例行:

$ head allting.csv 
ID,word,otherlangs 
100,a,it|uno| 
200,aaltos,fi|aaltojen| 
300,aardvark,is|jarðsvín|nl|aardvarken| 

更新: 好吧,我发现了如何在“项名称”列的费用填充“ID”列...

我改变了我的bulkload.py看起来像这样:

transformers: 

- kind: Word 
    connector: csv 
    connector_options: 
    encoding: utf-8 
    columns: from_header 
    property_map: 
    - property: __key__ 
     external_name: id 
     export_transform: transform.key_id_or_name_as_string 
     import_transform: transform.create_foreign_key('id', key_is_id=True) 

    - property: word· 
     external_name: word· 

    - property: otherlangs· 
     external_name: otherlangs· 

CSV文件看起来是这样的:

id,word,otherlangs 
100,a,it|uno| 
200,aaltos,fi|aaltojen| 
... 

而在数据存储浏览器的输出看起来像现在这样:

datastore viewer as it looks now

仍想知道是否有任何方法来填充ID和“密钥名称”列 并将写入操作降至4?

回答

0

由于没有人对这个问题有任何想法,我会记录我想出的这个解决方法。

我能够这样做是为了在bulkload.yaml文件

... 
transformers: 

- kind: Word 
    connector: csv 
    connector_options: 
    encoding: utf-8 
    columns: from_header 
    property_map: 
    - property: __key__ 
     external_name: word 
     export_transform: transform.key_id_or_name_as_string 

    - property: otherlangs 
     external_name: otherlangs 

改变我的课,看起来像这样获取写OPS下降到4:

class Word(db.Model): 
    word = db.StringProperty(multiline=False) 
    otherlangs = db.StringProperty(multiline=True) 

    def __str__(self): #encode('utf8') 
    return "word: " + str(self.key().name().encode('utf8')) + ", otherlangs: " + self.otherlangs.encode('utf8') 

而现在写OPS是4,这是好的:

write ops down to 4

查询在交互式控制台中变得更加棘手,我花了一段时间才弄清楚。

from google.appengine.api import users 
from google.appengine.ext.db.metadata import Namespace 
import words 

foo = words.Word.get_by_key_name('abalone') 
print foo 

主要生产:

word: abalone, otherlangs: fr|ormeaux|it|orecchie di mare| 

我不明白的是...我怎样才能动态地添加这样的新词,我可以得到这个词是关键,像批量上传器正在为我做。但是我不会担心这一点,只要散装装载机能够做到这一点,那么我现在就足够了。

相关问题