Question: The assignment is in Pycharm. The assignment asks to convert the username and password to being entered by the user, add the ability to let

The assignment is in Pycharm. The assignment asks to convert the username and password to being entered by the user, add the ability to let the user enter a username to check with the is_admin method, and add exception handling and logging to the count_rows method

import psycopg2
from psycopg2 import sql
import logging
import getpass

# Set up logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)

# Accept user input for database connection
db_username = input("Enter database username: ")
db_password = getpass.getpass("Enter database password: ")

# Connect to the PostgreSQL database
try:
   connection = psycopg2.connect(
       host='localhost',
       database='postgres',
       user=db_username,
       password=db_password
   )
   connection.set_session(autocommit=True)

except psycopg2.Error as e:
   logging.error(f"Error connecting to the database: {e}")
   exit(1)

def is_admin(username: str) -> bool:
   try:
       with connection.cursor() as cursor:
           cursor.execute("""
               SELECT
                   admin
               FROM
                   users
               WHERE
                   username = %(username)s
           """, {'username': username})
           result = cursor.fetchone()

       if result is None:
           # User does not exist
           return False
       else:
           admin, = result
           return admin

   except psycopg2.Error as e:
       logging.exception(f"Error in is_admin(): {e}")
       return False

def count_rows(table_name: str, limit: int) -> int:
   try:
       with connection.cursor() as cursor:
           stmt = sql.SQL("""
               SELECT
                   COUNT(*)
               FROM (
                   SELECT
                       1
                   FROM
                       {table_name}
                   LIMIT
                       {limit}
               ) AS limit_query
           """).format(
               table_name=sql.Identifier(table_name),
               limit=sql.Literal(limit),
           )
           cursor.execute(stmt)
           result = cursor.fetchone()

       rowcount, = result
       return rowcount

   except psycopg2.Error as e:
       logging.exception(f"Error in count_rows(): {e}")
       return 0

# User input loop
while True:
   username_to_check = input("Enter username to check (press 'q' to quit): ")

   if username_to_check.lower() == 'q':
       break

   print(is_admin(username_to_check))

   table_name = input("Enter table name: ")
   limit = int(input("Enter limit: "))
   print(count_rows(table_name, limit))

# Close the database connection
connection.close()

 


Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!