generated from NHSDigital/nhs-notify-repository-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial oracle connection, menu fanciness for either paulos test or k…
…ate aws dbs
- Loading branch information
1 parent
d92b5e8
commit 63d03ef
Showing
7 changed files
with
481 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
-----BEGIN PRIVATE KEY----- | ||
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 | ||
h5SMrYhbFhHUemLm0a2eLa9vIHssCZ0= | ||
-----END PRIVATE KEY----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Python connector pre-requisites | ||
|
||
- Ensure docker image for Oracle database is running and on correct port | ||
- Install an SQL Oracle IDE of your choice | ||
- Create a user that is not SYS if creating data, best practice | ||
- Once finished, don't forget to stop the docker container if still working |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
import sql | ||
import menu | ||
|
||
db_choices= ["TEST", "KATE"] | ||
db = True | ||
while db not in db_choices: | ||
db = str.upper(input("Please enter which DB you would like to connect to (TEST/KATE): ")) | ||
if db not in db_choices: | ||
print("DB not found, please try again") | ||
|
||
connection = sql.create_connection(db) | ||
cursor = connection.cursor() | ||
tables = [] | ||
|
||
if db == "TEST": | ||
cursor.execute("SELECT table_name FROM user_tables") | ||
print("Available tables:") | ||
for row in cursor: | ||
print(row) | ||
tables+= row | ||
|
||
else: | ||
cursor.execute("SELECT table_name FROM user_synonyms") | ||
print("Available synonyms:") | ||
for row in cursor: | ||
print(row) | ||
tables+= row | ||
|
||
table_name = True | ||
while table_name not in tables: | ||
table_name = str.upper(input("Which would you like to interact with?: ")) | ||
if table_name not in tables: | ||
print("Table not found, please try again") | ||
|
||
ans=True | ||
while ans: | ||
print (""" | ||
1. Add Patient(s) | ||
2. Delete Patient(s) | ||
3. Update Patient(s) | ||
4. Fetch all Patients | ||
5. Exit | ||
""") | ||
choice = input("What would you like to do? ") | ||
columns = sql.get_column_names(cursor, table_name) | ||
if choice=="1": | ||
data = menu.insert_patients(columns) | ||
sql.insert_patients(cursor, table_name, data) | ||
connection.commit() | ||
sql.print_table(cursor, table_name) | ||
elif choice=="2": | ||
data = menu.delete_patients(columns) | ||
sql.delete_patients(cursor, table_name, data, columns) | ||
connection.commit() | ||
sql.print_table(cursor, table_name) | ||
elif choice=="3": | ||
data = menu.update_patients(columns) | ||
sql.update_patients(cursor, table_name, data) | ||
#connection.commit() | ||
#sql.print_table(cursor, table_name) | ||
elif choice=="4": | ||
sql.print_table(cursor, table_name) | ||
elif choice=="5": | ||
cursor.close() | ||
connection.close() | ||
ans=False | ||
elif choice !="": | ||
print("\nNot Valid Choice, try again") | ||
|
||
#Ticket BCSS-18709 | ||
#Read/Write/Update database table | ||
|
||
# cursor.execute(sql.read_rows("MPI")) | ||
# columns = [col[0] for col in cursor.description] | ||
# print(columns) | ||
# for r in cursor: | ||
# print(r) | ||
|
||
# print("\n") | ||
|
||
# #Check test patient was added | ||
# for row in cursor.execute('select person_family_name, person_given_name from mpi'): | ||
# print(row[0] + " " + row[1], "is in the table") | ||
|
||
|
||
# #Update a test patient | ||
# cursor.execute(sql.update_patient_family_name('Test3', "NewPatientUpdated")) | ||
# # cursor.execute(""" | ||
# # update mpi | ||
# # set person_family_name = 'PatientUpdated' | ||
# # where person_given_name = 'Test1'""") | ||
|
||
# for row in cursor.execute('select person_family_name, person_given_name from mpi'): | ||
# if row[0] == 'PatientUpdated': | ||
# print("\n"+ row[0] + " " + row[1], "has been updated") | ||
|
||
# connection.commit() | ||
|
||
# # Fetch entire rows | ||
# cursor.execute("select * from mpi") | ||
# rows = cursor.fetchall() | ||
# print("\nRows:") | ||
# for row in rows: | ||
# print(row) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
from datetime import date | ||
|
||
def insert_patients(columns): | ||
#Maybe add option to read in from CSV/excel file? | ||
|
||
#Manually | ||
ans=True | ||
while ans: | ||
choice = input("Would you like to add patients manually? (Y/N): ") | ||
if str.upper(choice)=="Y": | ||
num_entries = int(input("Enter the number of patients to add: ")) | ||
print(columns) | ||
data=[] | ||
for i in range(num_entries): | ||
print(f'\n#### Patient {i+1} ####') | ||
data = data_entry(columns, data) | ||
|
||
print("Adding to table: ", data) | ||
return data | ||
#Option to just auto-add test patient with testpatient counter | ||
elif str.upper(choice)=="N": | ||
return None | ||
|
||
elif choice !="": | ||
print("\nNot Valid Choice, try again") | ||
|
||
def data_entry(columns, data): | ||
temp_dict = {} | ||
for i in columns: | ||
x = input(f'Please enter the {i} for the patient (Leave blank to skip): ') | ||
if(x): | ||
temp_dict[i] = x | ||
|
||
data.append(temp_dict) | ||
return data | ||
|
||
def delete_patients(columns): | ||
print (""" | ||
1. Delete all rows | ||
2. Delete rows conditionally | ||
3. Delete specific row | ||
""") | ||
choice = input("What would you like to do? ") | ||
data=[] | ||
if choice=="1": | ||
return True | ||
elif choice=="2": | ||
print(columns) | ||
column = input("What column would you like to delete rows by? \n(Please make sure it matches table column name): ") | ||
condition = input(f'What value would you like to check and delete for in the {column} column?: ') | ||
data = dict(column=column, condition=condition) | ||
return data | ||
elif choice=="3": | ||
data = input("Which row would you like to delete? ") | ||
elif choice !="": | ||
print("\nNot Valid Choice, try again") | ||
#Delete all rows | ||
#Delete specific rows conditionally | ||
#Delete specific row | ||
|
||
def update_patients(columns): | ||
ans=True | ||
while ans: | ||
choice = input("Would you like to update patients manually? (Y/N): ") | ||
if str.upper(choice)=="Y": | ||
print(columns) | ||
field_to_update = input("What field would you like to update? \n(Please make sure it matches table name): ") | ||
new_value = input("What value would you like to update it to?: ") | ||
print(columns) | ||
condition_column = input(f'What column would you like to be the condition for the updates for {field_to_update}\n(Please make sure it matches table name):?: ') | ||
condition_value = input(f'What value in {condition_column} would you like to check for?: ') | ||
data = dict( | ||
field_to_update=field_to_update, | ||
new_value=new_value, | ||
condition_column=condition_column, | ||
condition_value=condition_value | ||
) | ||
return data | ||
#Option to just auto-update patient with NewPatientUpdated | ||
elif str.upper(choice)=="N": | ||
return None | ||
elif choice !="": | ||
print("\nNot Valid Choice, try again") |
Oops, something went wrong.