::::::::::::::
get_age.pl
::::::::::::::
#!/usr/bin/perl
# Perl DBI version
use DBI;
use strict;

my $dbh   = ();
my $query = '';
my $sth   = '';
my @list  = ();

system("clear");
system("export PGPASSWORD='Your_Flask_Password_Here'");

# $dbh = DBI->connect("dbi:Pg:dbname=flask", 'www-data', 'Your_Flask_Password_Here');
$dbh = DBI->connect("dbi:Pg:dbname=flask", 'www-data', '');

$query = qq |SELECT client_id, lname, fname FROM mpi ORDER BY lname|;
$sth = $dbh->prepare($query);
$sth->execute();
while (my $row = $sth->fetchrow_hashref('NAME_lc') ) {
     push @list, "[$row->{client_id}] -- $row->{lname}, $row->{fname}\n";
}
$sth->finish();

print "\n\nID -- Name";
print "\n-------------------";
print "\n@list";
print("\nEnter Client ID: ");
my $id = <STDIN>;
chomp($id);

$query = qq |SELECT lname, fname, dob, EXTRACT(YEAR FROM AGE(dob)) AS age, AGE(dob) AS detail FROM mpi WHERE client_id = $id|;
$sth = $dbh->prepare($query);
$sth->execute();
my ($lname, $fname, $dob, $age, $detail) = $sth->fetchrow();
$sth->finish();

$dbh->disconnect;

if (!$lname) {
     print "No record for Client ID $id found.\n";
} else {
     print "\n\n[$id] $fname $lname is $age years of age. (DOB: $dob, AGE: $detail)\n\n";
}

print("Press ENTER to Continue...");
my $exit = <STDIN>;

__END__

::::::::::::::
get_age.py
::::::::::::::
#!/usr/bin/env python3
# Python Psycopg2 version

import psycopg2
import os

os.system("clear")

# Environment variable (optional)
os.environ["PGPASSWORD"] = "Your_Flask_Password_Here"

conn = psycopg2.connect(
    dbname="flask",
    user="www-data",
    password="Your_Flask_Password_Here"
)

cur = conn.cursor()

query = "SELECT client_id, lname, fname FROM mpi ORDER BY lname"
cur.execute(query)

rows = cur.fetchall()

print("\n\nID -- Name")
print("-------------------")

for row in rows:
    print(f"[{row[0]}] -- {row[1]}, {row[2]}")

id = input("\nEnter Client ID: ").strip()

query = """
SELECT lname, fname, dob,
       EXTRACT(YEAR FROM AGE(dob))::int AS age,
       AGE(dob)::text AS detail
FROM mpi
WHERE client_id = %s
"""

cur.execute(query, (id,))
result = cur.fetchone()

cur.close()
conn.close()

if not result:
    print(f"No record for Client ID {id} found.")
else:
    lname, fname, dob, age, detail = result
    print(f"\n\n[{id}] {fname} {lname} is {int(age)} years of age. (DOB: {dob}, AGE: {detail})\n")

input("Press ENTER to Continue...")

::::::::::::::
get_age_2.py
::::::::::::::
#!/usr/bin/env python3
# Python Psycopg2 (extras submodule) version

import psycopg2
import os
from psycopg2.extras import RealDictCursor

os.system("clear")

conn = psycopg2.connect(
    dbname="flask",
    user="www-data",
    password="Your_Flask_Password_Here"
)

print("\n\nID -- Name")
print("-------------------")

cur = conn.cursor(cursor_factory=RealDictCursor)
cur.execute("SELECT client_id, lname, fname FROM mpi ORDER BY lname")
for row in cur:
    print(f"[{row['client_id']}] -- {row['lname']}, {row['fname']}")

id = input("\nEnter Client ID: ").strip()

query = """
SELECT lname, fname, dob,
       EXTRACT(YEAR FROM AGE(dob))::int AS age,
       AGE(dob)::text AS detail
FROM mpi
WHERE client_id = %s
"""

cur.execute(query, (id,))
result = cur.fetchone()

cur.close()
conn.close()

if not result:
    print(f"No record for Client ID {id} found.")
else:

    # lname  = result['lname']
    # fname  = result['fname']
    # dob    = result['dob']
    # age    = result['age']
    # detail = result['detail']
    # print(f"\n\n[{id}] {fname} {lname} is {int(age)} years of age. (DOB: {dob}, AGE: {detail})\n")

    print(f"\n\n[{id}] {result['fname']} {result['lname']} is {int(result['age'])} years of age. (DOB: {result['dob']}, AGE: {result['detail']})\n")

input("Press ENTER to Continue...")

::::::::::::::
get_age.sh
::::::::::::::
#!/bin/bash
# Bash psql version
clear

export PGPASSWORD="Your_Flask_Password_Here"

echo ""
echo "ID -- Name"
echo "-------------------"

psql -U www-data -d flask -At -F"|" -c \
"SELECT client_id, lname, fname FROM mpi ORDER BY lname" |
while IFS="|" read -r id lname fname; do
    echo "[$id] -- $lname, $fname"
done

echo ""
read -p "Enter Client ID: " id

result=$(psql -U www-data -d flask -At -F"|" -c \
"SELECT lname, fname, dob,
        EXTRACT(YEAR FROM AGE(dob)),
        AGE(dob)
 FROM mpi
 WHERE client_id = $id")

if [ -z "$result" ]; then
    echo "No record for Client ID $id found."
else
    IFS="|" read -r lname fname dob age detail <<< "$result"
    echo ""
    echo "[$id] $fname $lname is $age years of age. (DOB: $dob, AGE: $detail)"
    echo ""
fi

read -p "Press ENTER to Continue..."

