Existen varios drivers Python para PostgreSQL, para diferentes plataformas y versiones de Python. El más popular es psycopg, el cual soporta actualmente todas las versiones de Python desde 2.5 hasta 3.4 sobre plataformas Unix y Windows. Pero en mi caso decidí utilizar el driver pg8000, que está desarrollado íntegramente con Python y es liberado con licencia BSD. Además, es el driver utilizado por el framework Web2Py.
Los siguientes son los paquetes necesarios para conectar python con Postgres
sudo apt install python3-postgresql python3-psycopg2 python3-dev python3-pg8000 libapache2-mod-python
En el sitio oficial existe una buena guía con ejemplos de conexión a PostgreSQL desde Python.
Para lo siguiente, se asume que se utilizo mi manual para configurar el servidor web.
Ahora creamos un script que verifique el acceso a todos los servicios.
nano ~/public_html/postgres.py
El siguiente script se conecta al motor de bases de datos PostgreSQL utilizando el usuario "juaramir" para consultar la versión del motor (ejecutando la consulta select version();):
#!/usr/bin/python
# coding=utf-8
# Imprimir los headers HTTP
print("Content-Type: text/html")
print("")
# Imprimir el contenido de la página
print("<h2>Hola mundo</h2>")
print("<p>Prueba de ejecución de script Python en modo CGI.</p>")
# Mostrar la versión de Postgres
import pg8000
con = pg8000.connect(user="juaramir", password="123456", host="localhost", database="postgres")
c = con.cursor()
c.execute("select version()")
v = "".join(c.fetchone())
print("<p>La versión de PostgreSQL es: <b>%s</b></p>" % v.encode("utf-8"))
Recuerda cambiar los datos por los tuyos.
Guardar los cambios y ajustar los permisos adecuadamente
sudo chmod +x ~/public_html/postgres.py
Verificar el funcionamiento desde línea de comandos:
python3 postgres.py
Fuente: https://www.linuxito.com/gnu-linux/nivel-medio/655-linux-apache-python-postgresql