Python Forum
Display List for User Input - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Display List for User Input (/thread-9111.html)



Display List for User Input - anelliaf - Mar-21-2018

Hello,

I'm trying to display a list of databases to a user and have them make a selection based on number. Once the selection is made, I'd like to construct a connection string from their input. So far, I have basic code to have the user connect but I'm unable to take their database input and construct and append it to the connection string.

import cx_Oracle
import getpass


# Database List
db_list = ['TEST11C', 'TEST12C']
x = 0

print ('\nChoose a database: ')
for i in db_list:
    x += 1
    print(x, i)

while True:
    try:
        # Input username and password
        uname = input('\nEnter username: ')
        pw = getpass.getpass(prompt='Enter password: ')
        conn_str = u'%s/%s@<DATABASE>' % (uname, pw)
        conn = cx_Oracle.connect(conn_str)
        c = conn.cursor()
        break
    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print("\nInvalid username/password.  Please try again.")
Any idea how I can display a list, have the user select a number from the list and take the corresponding database name and add it to the connection string?

Thanks!


RE: Display List for User Input - anelliaf - Mar-22-2018

I was able to find an interactive menu program and adjust it slightly to do what I need but I'm still having an issue with the database menu:

# Import the modules needed to run the script.
import sys, os
import cx_Oracle
import getpass

# Main definition - constants
menu_actions = {}

# =======================
#     MENUS FUNCTIONS
# =======================
# Main menu
def main_menu():
    os.system('cls')

    print("Welcome!\n")
    print("Please choose from the menu below:")
    print("1. Change Password")
    print("2. Unlock Account")
    print("\n0. Quit")
    choice = input(" >>  ")
    exec_menu(choice)

    return

# Execute menu
def exec_menu(choice):
    os.system('cls')
    ch = choice.lower()
    if ch == '':
        menu_actions['main_menu']()
    else:
        try:
            menu_actions[ch]()
        except KeyError:
            print("Invalid selection, please try again.\n")
            menu_actions['main_menu']()
    return

def db_menu(choice):
    os.system('cls')
    ch = choice.lower()
    print("Choose a database:\n")
    if ch == '':
        menu_actions['main_menu']()
    else:
        try:
            db_list[ch]()
        except KeyError:
            print("Invalid selection, please try again.\n")
            menu_actions['main_menu']()


# Database Login Menu
def db_login():
    while True:
        try:
            # Input username and password
            uname = input('\nEnter username: ')
            pw = getpass.getpass(prompt='Enter password: ')
            conn_str = u'%s/%s@%db' % (uname, pw)
            conn = cx_Oracle.connect(conn_str)
            c = conn.cursor()
            break
        except cx_Oracle.DatabaseError as e:
            error, = e.args
            print("\nInvalid username/password.  Please try again.")

# Menu 1
def menu1():
    print("Menu Item: Change Password\n")
    db_menu()
    db_login()
    print("9. Back")
    print("0. Quit")
    choice = input(" >>  ")
    exec_menu(choice)
    return

# Menu 2
def menu2():
    print("Menu Item: Unlock Account\n")
    db_menu()
    db_login()
    print("9. Back")
    print("0. Quit")
    choice = input(" >>  ")
    exec_menu(choice)
    return

# Back to main menu
def back():
    menu_actions['main_menu']()

# Exit program
def exit():
    sys.exit()


# =======================
#    MENUS DEFINITIONS
# =======================

# Database list
db_list = {
    '1': test11c,
    '2': test12c,
}
#db_list = ['TEST11C', 'TEST12C']

# Menu definition
menu_actions = {
    'main_menu': main_menu,
    '1': menu1,
    '2': menu2,
    '9': back,
    '0': exit,
}

# =======================
#      MAIN PROGRAM
# =======================

# Main Program
if __name__ == "__main__":
    # Launch main menu
    main_menu()



RE: Display List for User Input - buran - Mar-27-2018

the discussion continued in another thread - https://python-forum.io/Thread-User-Input-to-Choose-from-Dictionary