commit e6554e3eb9d829becee6d1939b5d7cd4d1db28a1 Author: kdeng00 Date: Mon Nov 16 16:18:03 2020 -0500 Initial commit diff --git a/connection_string.json b/connection_string.json new file mode 100644 index 0000000..90578db --- /dev/null +++ b/connection_string.json @@ -0,0 +1,7 @@ +{ + "driver": "", + "server": "", + "database": "", + "username": "", + "password": "" +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..b492c1e --- /dev/null +++ b/main.py @@ -0,0 +1,150 @@ +""" +A program demonstrating how to connect to a SQL Server 2000 database and retrieving some results +from a query. + +Author: Kun Deng + +""" + +import collections # Used for a list structure +import datetime # Used for parsing datetimes +import json # Used for parsing the connection string info +import sys # Used to retrieve the command line arguments + +import pyodbc # Used to connect to the SQL Server 2000 database + + +# Model representing the [JobMessageQueue] table +class JobMessageQueue: + + # The constructor + def __init__(self, rec_id = "", user_id = "", message = "", occurred = "", cleared = "", job_key = ""): + self.rec_id = rec_id + self.user_id = user_id + self.message = message + self.occurred = occurred + self.cleared = cleared + self.job_key = job_key + + + rec_id = 0 + user_id = "" + message = "" + occurred = "" + cleared = "" + job_key = "" + + +# Model representing the connection string json file +class ConnectionString: + + # The constructor + def __init__(self, driver = "", server = "", database = "", username = "", password = ""): + self.driver = driver + self.server = server + self.database = database + self.username = username + self.password = password + + + # The SQL Native Client driver can communicate with SQL Server 2000 + driver = "SQL Native Client" + server = "" + database = "" + username = "" + password = "" + + +# Retrieves queued messages of a given user +def retrieve_queued_messages(conn_string, user): + messages = collections.defaultdict(JobMessageQueue) + + # Opens a connection to the database + conn = pyodbc.connect(conn_string) + # Creates a cursor object. From this object one can make queries against + # the database + curs = conn.cursor() + + i = 0 + + # Iterates through each row returned from the query and adds the record + # to our user-defined dictionary messages + for row in curs.execute("SELECT * FROM [JobMessageQueue] WHERE UserID = ?", user): + message = JobMessageQueue(row.Rec_id, row.UserID, row.Message, row.Occurred) + message.cleared = row.Cleared + message.job_key = row.JobKey + + messages[i] = message + i += 1 + + conn.close() + + return messages + + +# Parsed the json file as a connection string object +def parse_connection_string(path): + file = open(path, "r") + + json_obj = json.loads(file.read()) + + file.close() + + conn_string = ConnectionString() + conn_string.driver = json_obj["driver"] + conn_string.server = json_obj["server"] + conn_string.database = json_obj["database"] + conn_string.username = json_obj["username"] + conn_string.password = json_obj["password"] + + return conn_string + + +# Returns the connection string object as a string. Conforming to the connection string +# format to connect to the SQL Server 2000 database +def connection_string_obj_to_string(conn_string_obj): + conn_string = f"Driver={conn_string_obj.driver}; Server={conn_string_obj.server}; " + conn_string = conn_string + f"Database={conn_string_obj.database}; " + conn_string = conn_string + f"UiD={conn_string_obj.username}; " + conn_string = conn_string + f"PwD={conn_string_obj.password};" + + return conn_string + + +def print_queued_message(message): + print("\nRec Id: %d" % message.rec_id) + print("User Id: %s" % message.user_id) + print("Message: %s" % message.message) + print("Occurred: %s" % message.occurred) + print("Cleared: %s" % message.cleared) + print("Job Key: %s\n" % message.job_key) + + +def print_queued_messages(messages): + for message in messages.items(): + print_queued_message(message[1]) + + +def main(): + print("In the main function") + + if len(sys.argv) < 2: + print("Include path to the connection string file") + sys.exit(-1) + + connection_str_path = sys.argv[1] + + conn_string_obj = parse_connection_string(connection_str_path) + conn_string = connection_string_obj_to_string(conn_string_obj) + + print("Connection string is %s" % (conn_string)) + + messages = retrieve_queued_messages(conn_string, "kdeng") + + print_queued_messages(messages) + + + +# Checking if the main function has been declared, if so that is where the program starts +if __name__ == "__main__": + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..942c10b --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pyodbc==4.0.30