def Select(query, params): try: connection = connect() with connection: cursor = connection.cursor() cursor.execute(query, params) result = cursor.fetchall() cursor.close() connection.close() except MySQLdb.Error: raise MySQLdb.Error("Select error") return result
def Update(query, params): try: connection = connect() with connection: cursor = connection.cursor() connection.begin() cursor.execute(query, params) connection.commit() cursor.close() id = cursor.lastrowid connection.close() except MySQLdb.Error: raise MySQLdb.Error("Update error") return id
def createPostHelper(date, thread, message, user, forum, optional): finder.find(table="Threads", id="id", value=thread) finder.find(table="Forums", id="short_name", value=forum) finder.find(table="Users", id="email", value=user) if len(Select("SELECT Threads.id FROM Threads JOIN Forums ON Threads.forum = Forums.short_name " "WHERE Threads.forum = %s AND Threads.id = %s", (forum, thread, ))) == 0: raise Exception("no thread with id = " + thread + " in forum " + forum) if "parent" in optional: if len(Select("SELECT Posts.id FROM Posts JOIN Threads ON Threads.id = Posts.thread " "WHERE Posts.id = %s AND Threads.id = %s", (optional["parent"], thread, ))) == 0: raise Exception("Cant find post with id = " + optional["parent"]) query = "INSERT INTO Posts (message, user, forum, thread, date" values = "(%s, %s, %s, %s, %s" parameters = [message, user, forum, thread, date] for param in optional: query += ", "+param values += ", %s" parameters.append(optional[param]) query += ") VALUES " + values + ")" update = "UPDATE Threads SET posts = posts + 1 WHERE id = %s" connection = connect() with connection: cursor = connection.cursor() try: connection.begin() cursor.execute(update, (thread, )) cursor.execute(query, parameters) connection.commit() except Exception as e: connection.rollback() raise Exception("Database error: " + e.message) post_id = cursor.lastrowid cursor.close() connection.close() post = postQueryHelper(post_id) del post["dislikes"] del post["likes"] del post["parent"] del post["points"] return post