2013-12-06 1 views
21

Я создаю приложение GAE Flask с Flask-Alchemy против Cloud SQL и запускаю dev_appserver для тестирования приложения по мере его создания.Локальное подключение MySQLdb не работает с AttributeError для paramstyle при запуске сервера разработки GAE

Однако, если я устанавливаю SQLALCHEMY_DATABASE_URI к более mysql+gaerdbms:///appname?instance=instanceid URL, я получаю следующее отслеживающий при попытке позвонить db.create_all():

Traceback (most recent call last): 
    # earlier lines omitted for brevity 
    File "/Project/app/foo.bar/foo/bar/admin/__init__.py", line 26, in init_db 
    db.create_all() 
    File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 856, in create_all 
    self._execute_for_all_tables(app, bind, 'create_all') 
    File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 848, in _execute_for_all_tables 
    op(bind=self.get_engine(app, bind), tables=tables) 
    File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 797, in get_engine 
    return connector.get_engine() 
    File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 473, in get_engine 
    self._engine = rv = sqlalchemy.create_engine(info, **options) 
    File "/Project/app/distlib/sqlalchemy/engine/__init__.py", line 332, in create_engine 
    return strategy.create(*args, **kwargs) 
    File "/Project/app/distlib/sqlalchemy/engine/strategies.py", line 69, in create 
    dialect = dialect_cls(**dialect_args) 
    File "/Project/app/distlib/sqlalchemy/dialects/mysql/base.py", line 1986, in __init__ 
    default.DefaultDialect.__init__(self, **kwargs) 
    File "/Project/app/distlib/sqlalchemy/engine/default.py", line 124, in __init__ 
    self.paramstyle = self.dbapi.paramstyle 
AttributeError: 'module' object has no attribute 'paramstyle' 

Что дает? Почему требуется (требуется DB-API 2.0) атрибут paramstyle?

+3

PS. Некоторые могут подумать, что неправильно, что я отвечаю на свой вопрос сразу после его публикации. Перед тем, как делать downvoting, пожалуйста, прочитайте [Это нормально, чтобы спросить и ответить на ваши собственные вопросы] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) , –

ответ

9

Это означает, что модуль MySQLdb отсутствует и не удалось импортировать. GAE SDK сам не поставляется с клиентской библиотекой MySQLdb; установить MySQLDb (as instructed in the SDK documentation):

venv/bin/pip install mysql-python 

или использовать менеджер пакетов ОС для установки MySQLDb в системном питона.

Ошибка вызвана модулем Google google.appengine.api.rdbms_mysqldb, действующим как заглушка, не имеющим атрибута paramstyle, когда import MySQLdb не работает. Предусмотрена функция stub connect(), которая повысит полезное исключение, но из-за неудачного взаимодействия с SQLAlchemy ошибка там будет намного менее информативной.

+2

Это также может означать, что есть и другая проблема с импортом MySQLdb. Это также было полезно: http://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib –

 Смежные вопросы

  • Нет связанных вопросов^_^