Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Display List for User Input
#1
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!
Reply
#2
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()
Reply
#3
the discussion continued in another thread - https://python-forum.io/Thread-User-Inpu...Dictionary
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Loop back through loop based on user input, keeping previous changes loop made? hbkpancakes 2 136 Nov-21-2020, 02:35 AM
Last Post: hbkpancakes
Information Unable to display joystick's value from Python onto display box MelfoyGray 2 153 Nov-11-2020, 02:23 AM
Last Post: MelfoyGray
  user input for multi-dimentional list without a prior iteration using input() Parshaw 6 351 Sep-22-2020, 04:46 PM
Last Post: Parshaw
  How to time a user's input Tbot1000 2 278 Aug-31-2020, 09:39 PM
Last Post: Larz60+
  converting user input to float troubles RecklessTechGuy 3 395 Aug-17-2020, 12:41 PM
Last Post: deanhystad
  Validating user input WJSwan 2 358 Jul-06-2020, 07:21 AM
Last Post: menator01
  Hi, I need help with defining user's input and applying it to code. jlmorenoc 2 453 Jun-24-2020, 02:10 PM
Last Post: pyzyx3qwerty
  taking input doesnt print as list bntayfur 2 354 Jun-04-2020, 02:48 AM
Last Post: bntayfur
  if the input is not number, let user input again teatea 14 965 Jun-02-2020, 07:03 PM
Last Post: ibutun
  How to allow user input only if certain requirements are met vininhosts 3 457 May-28-2020, 06:15 PM
Last Post: micseydel

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020