Forums

Can't connect to external Postgres database from a script

I'm using an external Postgres database. I have a paid account, so the site is connecting to the database and is loading the data as it should. Secrets are saved in the wsgi config file.

However, I have a custom script that is run via python manage.py fetch_posts. This works fine locally, but doesn't work when run from the Bash console:

django.db.utils.OperationalError: connection failed: Connection refused Is the server running on that host and accepting TCP/IP connections?

Connecting directly to the database via psql does work.

I'm wondering whether there's something that not letting the script connect to an external database? This is the same error I was having when trying to connect to the database at all when using the free account. Upgrading to a paid account made most of the errors go away, except for running the script from bash. I'd ideally like to set this up as a recurring task.

This is the full bash command: source .virtualenvs/myvirtualenv/bin/activate && python /home/uxlift/django-uxlift/manage.py fetch_posts

Full error log 16:56 ~ $ source .virtualenvs/myvirtualenv/bin/activate && python /home/uxlift/django-uxlift/manage.py fetch_posts Traceback (most recent call last): File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection self.connect() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect self.connection = self.get_new_connection(conn_params) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 269, in get_new_connection connection = self.Database.connect(conn_params) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/psycopg/connection.py", line 728, in connect raise ex.with_traceback(None) psycopg.OperationalError: connection failed: Connection refused Is the server running on that host and accepting TCP/IP connections? The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/uxlift/django-uxlift/manage.py", line 22, in <module> main() File "/home/uxlift/django-uxlift/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/core/management/init.py", line 442, in execute_from_command_line utility.execute() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/core/management/init.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/core/management/base.py", line 412, in run_from_argv self.execute(args, cmd_options) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/core/management/base.py", line 458, in execute output = self.handle(args, options) File "/home/uxlift/django-uxlift/apps/content/management/commands/fetch_posts.py", line 11, in handle for site in Site.objects.filter(include_in_newsfeed=True): File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/models/query.py", line 398, in iter self._fetch_all() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/models/query.py", line 1881, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/models/query.py", line 91, in iter results = compiler.execute_sql( File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1558, in execute_sql self.ensure_connection() cursor = self.connection.cursor() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 330, in cursor return self._cursor() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 306, in _cursor self.ensure_connection() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 288, in ensure_connection with self.wrap_database_errors: File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection self.connect() File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect self.connection = self.get_new_connection(conn_params) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, kwargs) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 269, in get_new_connection connection = self.Database.connect(**conn_params) File "/home/uxlift/.virtualenvs/myvirtualenv/lib/python3.10/site-packages/psycopg/connection.py", line 728, in connect raise ex.with_traceback(None) django.db.utils.OperationalError: connection failed: Connection refused Is the server running on that host and accepting TCP/IP connections?

If you can connect with psql and not from the script when you run them in the same console, then it has nothing to do with networking on PythonAnywhere. It is probably related to your django settings.