Python Forum
Small Database Program (Need Help)
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Small Database Program (Need Help)
#1
Hello Python community,

I'm new around these parts, and I've picked up on Python last week to begin understanding and writing working programs. I have been referencing the book "Automate the Boring Stuff" while I learn to program, but decided to pause at Chap4 to write some programs of my own.(taking off the training wheels).

The program I'm trying to write is a simple database that asks for your First Name, Last Name, email address, and birthday. Once all information is acquired, it is stored inside a database list. Once the program ends, it prints the database list(just to know it works without recalling the database).
Result: ['John Doe', 'jondoe@email.com', 'Jan 1 1996']

I have succeeded in doing this part, but now I want to carry out this process 3 times. Each time the cycle is carried out, I want a new row/column to be appended inside the database list.
Intended Result: [['John Doe', 'jondoe@email.com', 'January 1 1996'],['Johnny Appleseed', 'johhny@email.com', 'January 2 1996']]

I have gone online to look for answers to this problem, and came across some possible solutions, but they are obscure to me; thus hard for me to apply to the code that I had already written:

import time, sys


database = []
firstName = ''
lastName = ''
email = ''
name = []
birthday = []
months = ['January','February','March','April','May','June','July',
         'August','September','October','November','December']

print('Database')
print('\n')


# first name 
while True: 
    print('Please enter your first name. ' , end='')
    print('(Cannot include special characters)')
    firstName = input()
    if firstName.isdigit(): # validates characters
        print('Invalid character found')
        time.sleep(1.0) # 1 second pause before re-prompting name
    else:
        name.append(firstName.upper())
        break
# last name
while True:
    print('Please enter your last name. ' , end='')
    print('(Cannot include special characters)')
    lastName = input()
    if lastName.isdigit(): # validates characters
        print('Invalid character found')
        time.sleep(1.0) # 1 second pause before re-prompting name
    else:
        name.append(lastName.upper())
        break

# Concatenates first and last name strings into
# One string. Appends the 'name' variable to database
# as database[0]

name = name[0] + ' ' + name[1]
database.append(name)

# email
while True:
    # validates email
    input_email = input('What is your email address? ')
    if '@' not in input_email:
        print("Make sure to include the '@' in your email address. " , end='')
        print("Please try again")
        time.sleep(1.0)
    else:
        database.append(input_email)
        break

# birthday
while True:
    # validates birth month
    input_month = input('What is your month of birth? ')
    if input_month not in months:
        print('Invalid month. Please try again.')
        time.sleep(1.0)
    else:
        birthday.append(input_month)
        break

while True:
    # validates birth day
    try: 
        input_day = int(input('On what date were you born? '))
        if input_day >= 32:
            print('Invalid date. Please try again.')
            time.sleep(1.0)
        else:
            birthday.append(input_day)
            break
    except ValueError: # makes sure that string is not passed as an input
        print('Invalid date. Please try again.')
        time.sleep(1.0)
        input_day = int(input('On what date were you born? '))
    
while True:
    # validates birth year
    try: 
        input_year = int(input('What year were you born? '))
        if input_day >= 2021:
            print('This year has not happened yet. Please try again.')
            time.sleep(1.0)
        else:
            birthday.append(input_year)
            break
    except ValueError: # makes sure that string is not passed as an input
        print('Invalid entry. Please try again.')
        time.sleep(1.0)
        input_day = int(input('What year were you born? '))    

# concatenates 'birthday' list
# & appends them to database as
# database[2]

birthday = birthday[0] + ' ' + str(birthday[1]) + ' ' + str(birthday[2])
database.append(birthday)

print(database)
What can I add to my pre-existing code that won't break the program when ran?


Side note: I feel like I wrote more lines than I needed to to carry the process out. If I did, my apologies. I was really focussed on making the program make logical sense on the end-user side. Smile
Reply
#2
A suggestion to make code easier to maintain, understand and expand, would be to use a DBMS
simple one, like sqlite3 and SQLalchemy to make access to data even simpler.

I have a tutorial on sqlalchemy here: https://python-forum.io/Thread-SqlAlchem...-Data-Load
Reply
#3
(Jul-11-2020, 03:06 AM)thewetmosquito Wrote: I want to carry out this process 3 times.
...
What can I add to my pre-existing code that won't break the program when ran?

There isn't a way for you to carry out the process 3 times without making any other changes to your code, but only a few changes would be needed. The simplest thing you could do would be to use a for loop like for _ in range(3) to loop through your code that gets user input and adds it to your database list.

If you add a for loop that runs lines 17 - 105, AND move the initialization of all your variables except database and months inside the loop, that will *almost* get you what you're looking for. Your database will end up being just one long list, instead of the list of lists you want, so you'll need to add a little additional code to handle that differently to get your desired output.
Reply
#4
There are many ways to do this. I would suggest trying sqlite3. You can do multiple inserts at once. Just need to create a list of what you want inserted. Have a look at this link.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  sqlite3 database does not save data across restarting the program SheeppOSU 1 387 Jul-24-2020, 05:53 AM
Last Post: SheeppOSU
  Small sqlite3 program error pythonNoob 5 1,305 May-10-2018, 05:45 PM
Last Post: pythonNoob
  Need small help on dynamic database connections Tirumal 4 1,497 Dec-28-2017, 07:02 PM
Last Post: buran

Forum Jump:

User Panel Messages

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