Импортируйте DAL web2py для использования с Google Cloud SQL в App Engine - PullRequest
1 голос
/ 19 марта 2012

Я хочу создать приложение на App Engine, которое использует Cloud SQL в качестве внутренней базы данных вместо собственного хранилища данных движка App (которое не поддерживает обычные операции SQL, такие как JOIN).

Облачный SQL имеетDB-API и, следовательно, я искал облегченный уровень абстракции данных (DAL), который бы помог легко управлять облачными базами данных.Небольшое исследование показало, что web2py имеет довольно аккуратный DAL, который совместим с Cloud SQL.

Так как мне на самом деле не нужна вся полнофункциональная платформа web2py, я скопировал файл dal.py из /папку gluon в основной каталог простого приложения для тестирования и включил в мое приложение следующую строку:

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'

Похоже, что это произошло из-за ошибки с атрибутом 'folder', который был назначен оператором

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

Кто-нибудь знает, что делает этот атрибут и как я могу решить эту проблему?

1 Ответ

0 голосов
/ 26 апреля 2012
Папка

- это параметр в конструкторе DAL. Он указывает на папку, в которой вы храните БД (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.
...