2013-02-19 77 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| 

我不明白的是...我怎樣才能動態地添加這樣的新詞,我可以得到這個詞是關鍵,像批量上傳器正在爲我做。但是我不會擔心這一點,只要散裝裝載機能夠做到這一點,那麼我現在就足夠了。

相關問題