hudolejev / agama

2 stars 2 forks source link

Using pymysql driver in db URI #15

Open fizmata opened 3 weeks ago

fizmata commented 3 weeks ago

I've encountered this error while deploying Agama on GKE, I suspect it might show itself some other places too.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/scoping.py", line 162, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/sqlalchemy/util/_collections.py", line 1012, in __call__
    return self.registry.setdefault(key, self.createfunc())
  File "/usr/lib/python3/dist-packages/flask_sqlalchemy/__init__.py", line 771, in create_session
    return SignallingSession(self, **options)
  File "/usr/lib/python3/dist-packages/flask_sqlalchemy/__init__.py", line 155, in __init__
    bind = options.pop('bind', None) or db.engine
  File "/usr/lib/python3/dist-packages/flask_sqlalchemy/__init__.py", line 893, in engine
    return self.get_engine(self.get_app())
  File "/usr/lib/python3/dist-packages/flask_sqlalchemy/__init__.py", line 910, in get_engine
    return connector.get_engine()
  File "/usr/lib/python3/dist-packages/flask_sqlalchemy/__init__.py", line 545, in get_engine
    self._engine = rv = sqlalchemy.create_engine(info, **options)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/__init__.py", line 479, in create_engine
    return strategy.create(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/strategies.py", line 87, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/usr/lib/python3/dist-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
    return __import__("MySQLdb")
ModuleNotFoundError: No module named   ##'MySQLdb'

Fix that worked for me:

changing

env = AGAMA_DATABASE_URI=mysql://<username>:<password>@<db-host>/<db-name>

to

env = AGAMA_DATABASE_URI=mysql+pymysql://<username>:<password>@<db-host>/<db-name>

Maybe it would be useful for someone else too

hudolejev commented 3 weeks ago

This is needed if using PyMySQL driver, yes.

If using any non-default drivers these should be specified explicitly: https://docs.sqlalchemy.org/en/13/core/engines.html#mysql.