page:guides:django:database connection

Connect Postgres for Django

Summary

Connect a Django app to PostgreSQL on Ample. Read DATABASE_URL at runtime with dj-database-url with psycopg: when you supply one with --env it is delivered encrypted and takes precedence; when you supply none and the app needs PostgreSQL, Ample auto-provisions a managed PostgreSQL 16 database and injects its connection string.

Representative Queries

Resource Requirements

Infrastructure Requirements

  1. Compute
    Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
  2. Postgres
    Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.

Framework and Workload

Release Status

Prerequisites

Workflow Steps

  1. Read the URL at runtime Open connections from the DATABASE_URL environment variable inside the app; never commit credentials and never connect at build time.
  2. Choose the source of the database Pass --env DATABASE_URL=... for an existing database, or omit it to let Ample provision a managed one on first deploy and reuse it on redeploys.
    Command: ample deploy . --name --public --start "python3 run.py"
  3. Test the connection through the app Expose a route (/db) that runs a trivial query and returns postgres=ok.
  4. Verify Fetch the live URL and run the success checks below. On failure read the build log, then the runtime log, fix the cause and deploy again; do not blind-retry.
    Command: ample logs --kind build

Limitations

Cost Estimate

Cost Breakdown

Examples

Success Checks

  1. Database route reports a live connection
    Kind: http_get
    Path: /db
    Expect: postgres=ok

Evidence Summary

  1. Canary run
    Summary: Django 5 project with dj-database-url and psycopg: the managed PostgreSQL database was auto-provisioned, python3 manage.py migrate ran as the release command, and /db and /migrated reported postgres=ok and the migrated marker.
    Observed At: 2026-09-20T01:42:25Z
    Implementation Revision: 199ff1dfd52683832ae75d3f98b53a7a4bff7f96-dirty (CLI e3181f5)
    Expires At: 2027-03-19T01:42:25Z
  2. Canary run
    Summary: Node app needing PostgreSQL with no DATABASE_URL: a managed database was auto-provisioned and /db reported postgres=ok.
    Observed At: 2026-09-19T23:55:33Z
    Implementation Revision: 1764076-tls-account-903d345
    Expires At: 2027-03-18T23:55:33Z