2012-03-19 18 views
1

App Engine上に、App Engine独自のデータストアではなくバックエンドデータベースとしてCloud SQLを使用するアプリケーションを作成したいとします。 JOIN)。App Engine上でGoogle Cloud SQLで使用するweb2pyのDALをインポートします。

クラウドSQLにはDB-APIがあるため、クラウドデータベースを簡単に操作するための軽量なデータ抽象化レイヤ(DAL)を探していました。少しの研究で、web2pyはCloud SQLと互換性のあるきちんとしたDALを持っていることが明らかになりました。

私は実際には全体のフルスタックのweb2pyのフレームワークを必要としないので、私はdal.pyは、簡単なテストアプリケーションのメインディレクトリに/グルーオンフォルダからファイルをコピーして、私のアプリでは、この行を含める:

from dal import DAL, Field 

db=DAL('google:sql://myproject:myinstance/mydatabase') 

ただし、このアプリケーションをデプロイして実行しようとするとエラーが発生しました。

Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 701, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/jarod-helloworld/2.357593994022416181/helloworld2.py", line 13, in get 
    db=DAL('google:sql://serangoon213home:rainman001/guestbook') 
    File "/base/data/home/apps/jarod-helloworld/2.357593994022416181/dal.py", line 5969, in __init__ 
    raise RuntimeError, "Failure to connect, tried %d times:\n%s" % (attempts, tb) 
RuntimeError: Failure to connect, tried 5 times: 
Traceback (most recent call last): 
    File "/base/data/home/apps/jarod-helloworld/2.357593994022416181/dal.py", line 5956, in __init__ 
    self._adapter = ADAPTERS[self._dbname](*args) 
    File "/base/data/home/apps/jarod-helloworld/2.357593994022416181/dal.py", line 3310, in __init__ 
    self.folder = folder or '$HOME/'+thread.folder.split('/applications/',1)[1] 
    File "/base/python_runtime/python_dist/lib/python2.5/_threading_local.py", line 199, in __getattribute__ 
    return object.__getattribute__(self, name) 
AttributeError: 'local' object has no attribute 'folder' 

それはそれは声明で割り当てられた「フォルダ」属性でエラーによるものであったようなことになります

self.folder = folder or '$HOME/'+thread.folder.split('/applications/',1)[1] 

は、誰もがこの属性が何を知っていて、私はこの問題を解決する方法?

答えて

0

フォルダは、DALコンストラクタのparmです。これは、DBを格納するフォルダ(sqlite)を指します。したがって、私はそれがあなたの場合の問題だとは思わない。私は再び接続文字列をチェックします。

web2pyのドキュメントから:

The DAL can be used from any Python program simply by doing this: 

from gluon import DAL, Field 
db = DAL('sqlite://storage.sqlite',folder='path/to/app/databases') 
i.e. import the DAL, Field, connect and specify the folder which contains the .table files (the app/databases folder). 

To access the data and its attributes we still have to define all the tables we are going to access with db.define_tables(...). 

If we just need access to the data but not to the web2py table attributes, we get away without re-defining the tables but simply asking web2py to read the necessary info from the metadata in the .table files: 

from gluon import DAL, Field 
db = DAL('sqlite://storage.sqlite',folder='path/to/app/databases', 
     auto_import=True)) 
This allows us to access any db.table without need to re-define it. 
関連する問題