從GAE

2011-09-12 44 views
1
數據存儲中檢索數據

我試圖通過使用檢索從數據存儲數據這 (在示例)從GAE

class Book(db.Model): 
title = db.StringProperty() 
author = db.StringProperty() 
category = db.StringProperty() 

e = Book(title ="LOTR", 
    author = "JRR Tolkien", 
    category = "Adventure") 

class Result(webapp.RequestHandler): 

Book = db.GqlQuery("SELECT * FROM Book") 
    for book in Book: 
     self.responce.out.write('<b>%s</b>' % book.title) 

此的解決方案是從一個谷歌的例子,但具有這樣的結果

Traceback (most recent call last): 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 3858, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 3792, in _Dispatch 
    base_env_dict=env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 580, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2918, in Dispatch 
    self._module_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2822, in ExecuteCGI 
    reset_modules = exec_script(handler_path, cgi_path, hook) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2697, in ExecuteOrImportScript 
    handler_path, cgi_path, import_hook) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2621, in LoadTargetModule 
    module_code = compile(source_file.read(), cgi_path, 'exec') 
    File "/home/kostas89/library/library.py", line 77 
    for book in Book: 
^
IndentationError: unexpected indent 

我也嘗試了fetch()方法,沒有任何結果..

編輯: ÿ但是當我刪除縮進,我有一個錯誤的'自我'。

Traceback (most recent call last): 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 3858, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 3792, in _Dispatch 
    base_env_dict=env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 580, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2918, in Dispatch 
    self._module_dict) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2822, in ExecuteCGI 
    reset_modules = exec_script(handler_path, cgi_path, hook) 
    File "/home/kostas89/google_appengine/google/appengine/tools/dev_appserver.py", line 2702, in ExecuteOrImportScript 
    exec module_code in script_module.__dict__ 
    File "/home/kostas89/library/library.py", line 74, in <module> 
    class Result(webapp.RequestHandler): 
    File "/home/kostas89/library/library.py", line 79, in Result 
    self.responce.out.write('<b>%s</b>' % book.title) 
NameError: name 'self' is not defined 

我發現propably是因爲標籤/ sapces的,我嘗試了一些解決方案,但仍然沒有工作。

回答

1

看那個報道錯誤 - 它告訴你正確的事情:

IndentationError: unexpected indent 

取下壓痕,產生:

Book = db.GqlQuery("SELECT * FROM Book") 
for book in Book: 
    self.responce.out.write('<b>%s</b>' % book.title) 
+0

是的但是當我刪除縮進,我有一個'自我'的錯誤。 文件 「/home/kostas89/library/library.py」,行78,在書的圖書搜索結果 :self.responce.out.write( '%S' %book.title) NameError:名字'自我'沒有定義 我發現,propably是因爲選項卡/ sapces,我嘗試了一些解決方案,但仍然無法正常工作。初學者的 – kostas89

+0

:用響應替換響應,並將你的代碼在def get(self)中進行查詢,以便自定義。看到這裏:http://code.google.com/appengine/docs/python/gettingstarted/usingdatastore.html –

0

我想取消縮進:

Book = db.GqlQuery("SELECT * FROM Book") 
for book in Book: 
    self.responce.out.write('<b>%s</b>' % book.title) 

的錯誤提示,看看會發生什麼。最有可能它正在報告中:

File "/home/kostas89/library/library.py", line 77
for book in Book:
^IndentationError: unexpected indent

indentation is significant在Python代碼中。但是white space is not necessarily

2

你的書類中的屬性應縮進。你的實體在處理器方法之外被實例化並且不被保存。你的GqlQuery在一個處理程序中,但不在一個方法內部,它沒有被正確縮進,它重新分配你用於你的模型類的變量,你的for語句沒有正確縮進,並且拼寫錯誤。

沒有問題,但您可能需要備份並閱讀App Engine Getting Started教程。完成這些示例後,進行小的增量更改並驗證代碼在每個代碼之後仍然運行。

+0

最後,我做了它(我的例子是有點不同於我的真正問題)。這在我眼前是錯誤的。你知道,當你有壓力時,你正在做出可笑的錯誤..我會休息一段時間,我會用清潔的頭腦繼續我的項目。謝謝。 – kostas89

1

你沒有把你的代碼放在一個方法裏面。它應該是這個樣子:

class Result(webapp.RequestHandler): 
    def get(self): 
    Book = db.GqlQuery("SELECT * FROM Book") 
    for book in Book: 
     self.response.out.write('<b>%s</b>' % book.title) 

另外:

  • 您的問題縮進似乎並不符合你實際使用的是什麼 - 讓像語言這一權利是非常重要的Python,縮進很重要。
  • 拼寫錯誤'回覆'。
  • 這不會返回任何結果,因爲您尚未在所創建的Book實體上調用.put()

我強烈建議您按照Drew的建議通過App Engine教程進行操作。

1

如果您想要嘗試reindent.py以確保縮進是正確的,或者使用諸如pylint之類的皮棉工具。我發現reindent非常有用,既reindent和pylint,值得嘗試。