Skip to content

Support for Postgres #239

Description

@ujwalnk

Changing the DATABASE_URL to postgresql://user:password@postgres:5432/my_db throws an error on psycopg not installed on the container. Running the docker image 0.23.0, the one available tagged as latest on github repo, at the time of rising this issue.

Error thrown on docker compose log
may  | Error: While importing 'run', an ImportError was raised:
may  |
may  | Traceback (most recent call last):
may  |   File "/usr/local/lib/python3.12/site-packages/flask/cli.py", line 245, in locate_app
may  |     __import__(module_name)
may  |   File "/app/run.py", line 4, in <module>
may  |     app = create_app()
may  |           ^^^^^^^^^^^^
may  |   File "/app/app/__init__.py", line 280, in create_app
may  |     db.init_app(app)
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 374, in init_app
may  |     engines[key] = self._make_engine(key, options, app)
may  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 665, in _make_engine
may  |     return sa.engine_from_config(options, prefix="")
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 844, in engine_from_config
may  |     return create_engine(url, **options)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "<string>", line 2, in create_engine
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py", line 281, in warned
may  |     return fn(*args, **kwargs)  # type: ignore[no-any-return]
may  |            ^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 617, in create_engine
may  |     dbapi = dbapi_meth(**dbapi_args)
may  |             ^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 697, in import_dbapi
may  |     import psycopg2
may  | ModuleNotFoundError: No module named 'psycopg2'
may  |
may  |
may  | Usage: flask [OPTIONS] COMMAND [ARGS]...
may  | Try 'flask --help' for help.
may  |
may  | Error: No such command 'db'.
may  | [entrypoint] flask db upgrade failed — the app will attempt schema recovery on startup.
may  | [2026-07-13 18:19:56 +0000] [1] [INFO] Starting gunicorn 26.0.0
may  | [2026-07-13 18:19:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:5050 (1)
may  | [2026-07-13 18:19:56 +0000] [1] [INFO] Using worker: gthread
may  | [2026-07-13 18:19:56 +0000] [33] [INFO] Booting worker with pid: 33
may  | [2026-07-13 18:19:56 +0000] [34] [INFO] Booting worker with pid: 34
may  | [2026-07-13 18:19:58 +0000] [1] [INFO] Control socket listening at /home/may/.gunicorn/gunicorn.ctl
may  | [2026-07-13 18:20:06 +0000] [34] [ERROR] Exception in worker process
may  | Traceback (most recent call last):
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/arbiter.py", line 713, in spawn_worker
may  |     worker.init_process()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/gthread.py", line 243, in init_process
may  |     super().init_process()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/base.py", line 136, in init_process
may  |     self.load_wsgi()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/base.py", line 148, in load_wsgi
may  |     self.wsgi = self.app.wsgi()
may  |                 ^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/base.py", line 66, in wsgi
may  |     self.callable = self.load()
may  |                     ^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 57, in load
may  |     return self.load_wsgiapp()
may  |            ^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsgiapp
may  |     return util.import_app(self.app_uri)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/util.py", line 411, in import_app
may  |     mod = importlib.import_module(module)
may  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
may  |     return _bootstrap._gcd_import(name[level:], package, level)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
may  |   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
may  |   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
may  |   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
may  |   File "<frozen importlib._bootstrap_external>", line 999, in exec_module
may  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
may  |   File "/app/run.py", line 4, in <module>
may  |     app = create_app()
may  |           ^^^^^^^^^^^^
may  |   File "/app/app/__init__.py", line 280, in create_app
may  |     db.init_app(app)
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 374, in init_app
may  |     engines[key] = self._make_engine(key, options, app)
may  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 665, in _make_engine
may  |     return sa.engine_from_config(options, prefix="")
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 844, in engine_from_config
may  |     return create_engine(url, **options)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "<string>", line 2, in create_engine
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py", line 281, in warned
may  |     return fn(*args, **kwargs)  # type: ignore[no-any-return]
may  |            ^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 617, in create_engine
may  |     dbapi = dbapi_meth(**dbapi_args)
may  |             ^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 697, in import_dbapi
may  |     import psycopg2
may  | ModuleNotFoundError: No module named 'psycopg2'
may  | No module named 'psycopg2'
may  | [2026-07-13 18:20:06 +0000] [34] [INFO] Worker exiting (pid: 34)
may  | [2026-07-13 18:20:06 +0000] [33] [ERROR] Exception in worker process
may  | Traceback (most recent call last):
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/arbiter.py", line 713, in spawn_worker
may  |     worker.init_process()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/gthread.py", line 243, in init_process
may  |     super().init_process()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/base.py", line 136, in init_process
may  |     self.load_wsgi()
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/base.py", line 148, in load_wsgi
may  |     self.wsgi = self.app.wsgi()
may  |                 ^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/base.py", line 66, in wsgi
may  |     self.callable = self.load()
may  |                     ^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 57, in load
may  |     return self.load_wsgiapp()
may  |            ^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsgiapp
may  |     return util.import_app(self.app_uri)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/gunicorn/util.py", line 411, in import_app
may  |     mod = importlib.import_module(module)
may  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
may  |     return _bootstrap._gcd_import(name[level:], package, level)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
may  |   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
may  |   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
may  |   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
may  |   File "<frozen importlib._bootstrap_external>", line 999, in exec_module
may  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
may  |   File "/app/run.py", line 4, in <module>
may  |     app = create_app()
may  |           ^^^^^^^^^^^^
may  |   File "/app/app/__init__.py", line 280, in create_app
may  |     db.init_app(app)
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 374, in init_app
may  |     engines[key] = self._make_engine(key, options, app)
may  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/flask_sqlalchemy/extension.py", line 665, in _make_engine
may  |     return sa.engine_from_config(options, prefix="")
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 844, in engine_from_config
may  |     return create_engine(url, **options)
may  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "<string>", line 2, in create_engine
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py", line 281, in warned
may  |     return fn(*args, **kwargs)  # type: ignore[no-any-return]
may  |            ^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/create.py", line 617, in create_engine
may  |     dbapi = dbapi_meth(**dbapi_args)
may  |             ^^^^^^^^^^^^^^^^^^^^^^^^
may  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 697, in import_dbapi
may  |     import psycopg2
may  | ModuleNotFoundError: No module named 'psycopg2'
may  | No module named 'psycopg2'
may  | [2026-07-13 18:20:07 +0000] [33] [INFO] Worker exiting (pid: 33)
may  | [2026-07-13 18:20:09 +0000] [1] [ERROR] Worker (pid:34) exited with code 3.
may  | [2026-07-13 18:20:09 +0000] [1] [INFO] Worker (pid:33) was sent SIGTERM!
Gracefully Stopping... press Ctrl+C again to force
 Container may  Stopping
may  | [2026-07-13 18:20:09 +0000] [1] [ERROR] Shutting down: Master
may  | [2026-07-13 18:20:09 +0000] [1] [ERROR] Reason: Worker failed to boot.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions