2014-02-10 17 views
0

我想讓我的Google App Engine應用程序與Flask-SQLAlchemy配合使用。我得到的錯誤:帶Google App Engine的Flask-SQLAlchemy只能在交互式控制檯中工作

AttributeError: 'module' object has no attribute 'paramstyle' 

我遵循了這個答案(Local MySQLdb connection fails with AttributeError for paramstyle when running GAE development server)中的說明,所以我不再得到錯誤的交互式控制檯(當我做一個應用程序上下文)。

但是,當我在本地GAE中運行應用程序時,仍然出現錯誤。爲什麼這仍然發生?我正在運行OSX Mavericks。完整的跟蹤:

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 266, in Handle 
    result = handler(dict(self._environ), self._StartResponse) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/conor/Documents/Projj/financey.py", line 117, in login_view 
    userObj = get_user(username) 
    File "/Users/conor/Documents/Projj/financey.py", line 88, in get_user 
    return db.session.query(User).filter_by(username=username).first() 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/orm/scoping.py", line 149, in do 
    return getattr(self.registry(), name)(*args, **kwargs) 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/util/_collections.py", line 864, in __call__ 
    return self.registry.setdefault(key, self.createfunc()) 
    File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 139, in __init__ 
    bind=db.engine, 
    File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 780, in engine 
    return self.get_engine(self.get_app()) 
    File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 797, in get_engine 
    return connector.get_engine() 
    File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 473, in get_engine 
    self._engine = rv = sqlalchemy.create_engine(info, **options) 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/__init__.py", line 332, in create_engine 
    return strategy.create(*args, **kwargs) 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/strategies.py", line 69, in create 
    dialect = dialect_cls(**dialect_args) 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/dialects/mysql/base.py", line 1985, in __init__ 
    default.DefaultDialect.__init__(self, **kwargs) 
    File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/default.py", line 124, in __init__ 
    self.paramstyle = self.dbapi.paramstyle 
AttributeError: 'module' object has no attribute 'paramstyle' 

編輯:在試圖進一步診斷問題,當在GAE互動控制檯我import MySQLdb(瀏覽器)我得到的錯誤ImportError: No module named _mysql

回答

2

環顧四周後和調試遠太久了,我終於發現了這個問題。在運行GAE開發服務器時,必須準確告知dev_appserver要連接到哪個MySQL實例。您使用的連接字符串(例如,在Python中)並不重要。連接字符串只確定數據庫名稱和實例。然而,如果你運行一個ipython控制檯,SQLAlchemy可以很好地解決它。這可能是由於在引擎蓋下使用了不同的驅動程序。

希望這節省了別人很多頭髮拉動。像這樣運行你的dev_appserver.py:

dev_appserver.py --mysql_host=<Cloud SQL IP> --mysql_user=root --mysql_password=<Cloud SQL root password> <application directory>