#!/usr/bin/python # TITLE: dbtrainer1 # WRITTEN BY: Bradley Stec, July 1999 # RuleSpace, Inc. # SUPPORTS: WebOps Database Interface Trainer Script # PURPOSE: This script is a code and output example of how to use the # MySQLdb API to communicate to a database and perform basic # SQL command language requests. # FUNCTION: Both by executing the script and by reading the source code, # a programmer should be able to get a grasp on how the interface # works and may borrow code for their own script projects. # REQUIREMENTS: This script requires the access to the webops module, and that a # database named "TEST" be installed in the webops specified # database server. # # CHANGES: 7/99 Initial Version import sys import webops import traceback sys.stderr = sys.stdout # Set Up Page Layout print "content-type: text/html" print print "\n" print "
\n" print "RuleSpace, Inc. WebOps Database Interface Trainer -- Part 1" print "By viewing the CGI script which presents the information below you'll be able to see how the database interface and API works within the WebOps scripting environment.
" print "
" traceback.print_exc() sys.exit() # A LITTLE BONUS INFORMATION FROM THE API # The API can provide some information about the connection and server. Note that these functions are # making use of the "db" object which is a sub-class of the WebOpsDB object. The "db" object bypasses the "wrapper" # level of the MySQLdb interface and speaks directly to the C coded _mysqlmodule.so, therefore it is not recommended # that you use this method frequently in timing-sensitive script applications. print "CONNECTED TO\n" print "\n"
" print " server ", WebOpsDB.db.get_host_info(), "
" print " running mySQL server v", WebOpsDB.db.get_server_info(), "
" print " current status: ",WebOpsDB.db.stat(), "" print "
" # CREATE YOUR PERSONAL CONNECTION TO THE "RESULTS" WITHIN THE CONNECTION OBJECT # We haven't actually queried anything yet, so don't get confused, we're just preparing for it. try: cursor = WebOpsDB.cursor() except: print "\n\n" traceback.print_exc() sys.exit() # EXAMPLE: INSERTING A NEW RECORD # This example uses a query command to INSERT a new record into the table. The format of the data must exactly match # the table structure requirements or it will be rejected. Note that we are using single quotes around strings within # the SQL command. # GOTCHA #1: The MySQLdb API doesn't respond well to zero value datatime fields. Make sure that you populate your datetime # fields with positive values. You'll notice I used the built-in mySQL function NOW() to make sure that there was a valid # date in the created field. The modified field is auto-updated because it is the first timestamp data type in the data table. # GOTCHA #2: INSERT or REPLACE? Both function in a very similar method, with one minor difference. The INSERT command # simply creates a new record/row and places the fields/columns into the table. The REPLACE command will INSERT a new record # into the table, then it compares the Primary Key values of the new record to any pre-existing matches in the table. Any # older records/rows in the table with a matching Primary Key (which is supposed to be unique) will be deleted in favor of # the new record. You might consider using REPLACE even when you want to INSERT just to make sure you don't end up with # duplicate data in your tables. print "EXAMPLES USING THE INSERT AND REPLACE SQL COMMANDS." # REPLACE try: cursor.execute("REPLACE INTO TEAM (MEMBER_ID,FIRST_NAME,LAST_NAME,REMARK,FAV_COLOR,OPEN_DATE) VALUES ('6','Frederick','Clueless','Clueless Fred','blue',NOW());") except: print "\n\n
" traceback.print_exc() sys.exit() # INSERT -- Note that since the Primary Key for the TEAM table is not specified in our insert command and member_id is an # autoincrement data type, a new member_id is assigned to this inserted record. Try reloading this web page in your browser # a few times to observe the results. try: cursor.execute("INSERT INTO TEAM (FIRST_NAME,LAST_NAME,REMARK,FAV_COLOR,OPEN_DATE) VALUES ('Ruprecht','Lionheart','Lost Rupe','cyan',NOW());") except: print "\n\n" traceback.print_exc() sys.exit() # INSERT -- This example will cause an INTEGRITY ERROR, because the MEMBER_ID will conflict with an existing MEMBER_ID. try: cursor.execute("INSERT INTO TEAM (MEMBER_ID,FIRST_NAME,LAST_NAME,REMARK,FAV_COLOR,OPEN_DATE) VALUES ('4','Fuzzy','Illogic','Evil Twin of Fuzzy Logic','red',NOW());") except: print "SAMPLE INTEGRITY ERROR
" print "" traceback.print_exc() print "" # REQUERY TO SEE RESULTS try: cursor.execute("SELECT * FROM TEAM") except: print "\n\n
" traceback.print_exc() sys.exit() resultSet = cursor.fetchall() print "ADDING NEW TEAM MEMBERS
" print "results of query:
" print "" print "" print "
" for cursorFieldname in cursor.description: print " " for cursorRecord in resultSet: print "" print " " +cursorFieldname[0]+ " " for cursorField in cursorRecord: print " " print "" print cursorField print " " print "" # CLOSING THE DATABASE OBJECT try: WebOpsDB.close() except: print "\n\n
" traceback.print_exc() sys.exit() # CONTINUED IN DBTRAINER2 # To learn more about replacing and updating records, and performing other SQL functions review # dbtrainer2. # END YOUR HTML PAGE print "