2004 prentice hall, inc. all rights reserved. chapter 35 – python outline 35.1 introduction...

63
2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1 First Python Program 35.1.2 Python Keywords 35.2 Basic Data Types, Control Statements and Functions 35.3 Tuples, Lists and Dictionaries 35.4 String Processing and Regular Expressions 35.5 Exception Handling 35.6 Introduction to CGI Programming 35.7 Form Processing and Business Logic 35.8 Cookies 35.9 Database Application Programming Interface (DB-API) 35.9.1 Setup 35.9.2 Simple DB-API Program 35.10 Operator Precedence Chart 35.11 Web Resources

Upload: georgia-poole

Post on 16-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

Chapter 35 – Python

Outline35.1 Introduction

35.1.1 First Python Program35.1.2 Python Keywords

35.2 Basic Data Types, Control Statements and Functions35.3 Tuples, Lists and Dictionaries35.4 String Processing and Regular Expressions35.5 Exception Handling35.6 Introduction to CGI Programming35.7 Form Processing and Business Logic35.8 Cookies35.9 Database Application Programming Interface (DB-API)

35.9.1 Setup35.9.2 Simple DB-API Program

35.10 Operator Precedence Chart35.11 Web Resources

Page 2: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

Objectives

• In this lesson, you will learn:– To understand basic Python data types.

– To understand string processing and regular expressions in Python.

– To use exception handling.

– To perform basic CGI tasks in Python.

– To construct programs that interact with MySQL databases using the Python Database Application Programming Interface (DB-API).

Page 3: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.1  Introduction

• Python– Interpreted

– Cross-platform

– Object-oriented

– Large-scale Internet search engines

– Small administration scripts

– GUI applications

– CGI scripts

– Freely distributed

Page 4: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.1.1 First Python Program

• Python– Can be executed on a program stored in a file

– Can run in interactive mode• Users enter lines of code one at a time

• Enables programmers to test small blocks of code quickly

Page 5: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_01.py(1 of 1)

1 # Fig. 35.1: fig35_01.py

2 # A first program in Python

3

4 print "Welcome to Python!"

Welcome to Python!

Page 6: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.1.1 First Python Program

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. >>> print "Welcome to Python!" Welcome to Python! >>> ^Z

Fig. 35.2 Python in interactive mode.

Page 7: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.1.2 Python Keywords

• Python is case-sensitive• Keywords can be obtained from keyword module

Page 8: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.1.2 Python Keywords

Python keywords

and continue else for import not raise assert def except from in or return break del exec global is pass try class elif finally if lambda print while Fig. 35.3 Python keywords.

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. >>> import keyword >>> print keyword.kwlist ['and', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while'] >>>

Fig. 35.4 Printing Python keywords in interactive mode.

Page 9: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.2  Basic Data Types, Control Statements and Functions

• Introduces basic data types, control statements, and functions– while loop– if statement

– Modulo operator ( % )– return keyword– if…elif…else statement

– Line-continuation character ( \ )

– Escape sequences

Page 10: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_05.py(1 of 2)

1 # Fig. 35.5: fig35_05.py

2 # Program to illustrate basic data types, control structures and

3 # functions.

4

5 def greatestCommonDivisor( x, y ):

6 gcd = min( x, y )

7

8 while gcd >= 1:

9

10 if ( x % gcd ) == ( y % gcd ) == 0:

11 return gcd

12 else:

13 gcd -= 1

14

15 def determineColor( color ):

16

17 if color == "green":

18 print "You entered green!"

19 elif color == "purple":

20 print "You entered purple!"

21 else:

22 print "You did not enter green or purple."

23

24 number1 = int( raw_input( "Enter a positive integer: " ) )

25 number2 = int( raw_input( "Enter a positive integer: " ) )

Page 11: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_05.py(2 of 2)

26

27 print "The greatest common divisor is", \

28 greatestCommonDivisor( number1, number2 )

29

30 for entry in range( 5 ):

31 colorChoice = raw_input( "\nEnter your favorite color: " )

32 determineColor( colorChoice )

Enter a positive integer: 2 Enter a positive integer: 30 The greatest common divisor is 2 Enter your favorite color: yellow You did not enter green or purple. Enter your favorite color: green You entered green! Enter your favorite color: black You did not enter green or purple. Enter your favorite color: purple You entered purple! Enter your favorite color: red You did not enter green or purple.

Page 12: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.2  Basic Data Types, Control Statements and Functions

Escape sequence

Meaning

\n Newline (line feed). \r Carriage return. \t Tab. \' Single quote. \" Double quote. \b Backspace. \\ Backslash. Fig. 35.6 Escape sequences.

Page 13: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.3  Tuples, Lists and Dictionaries

• list– A sequence of related data

• Tuple– A list whose elements may not be modified

– Immutable

– Singleton• One-element tuple

• Dictionary– A list of values that are accessed through their associated

keys

Page 14: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_07.py(1 of 3)

1 # Fig. 35.7: fig35_07.py

2 # A program that illustrates tuples, lists and dictionaries.

3

4 # tuples

5 aTuple = ( 1, "a", 3.0 ) # create tuple

6 firstItem = aTuple[ 0 ] # first tuple item

7 secondItem = aTuple[ 1 ] # second tuple item

8 thirdItem = aTuple[ 2 ] # third tuple item

9

10 print "The first item in the tuple is", firstItem

11 print "The second item in the tuple is", secondItem

12 print "The third item in the tuple is", thirdItem

13 print

14

15 firstItem, secondItem, thirdItem = aTuple

16 print "The first item in the tuple is", firstItem

17 print "The second item in the tuple is", secondItem

18 print "The third item in the tuple is", thirdItem

19 print

20

21 aTuple += ( 4, )

22 print "Used the += statement on the tuple"

23 print

24

Page 15: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_07.py(2 of 3)

25 # print the tuple

26 print "The raw tuple data is:", aTuple

27 print "The items in the tuple are:"

28

29 for item in aTuple: # print each item

30 print item,

31

32 print # end previous line

33 print # blank line

34

35 # lists

36 aList = [ 1, 2, 3 ] # create list

37 aList[ 0 ] = 0 # change first element of list

38 aList.append( 5 ) # add item to end of list

39

40 print "The raw list data is:", aList # print list data

41 print

42

43 aList += [ 4 ] # add an item to the end of the list

44 print "Added an item to the list using the += statement"

45 print

46

47 # print each item in the list

48 print "The items in the list are:"

49

Page 16: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_07.py(3 of 3)

50 for item in aList:

51 print item,

52

53 print # end previous line

54 print # blank line

55

56 # dictionaries

57 aDictionary = { 1 : "January", 2 : "February", 3 : "March",

58 4 : "April", 5 : "May", 6 : "June", 7 : "July",

59 8 : "August", 9 : "September", 10 : "October",

60 11 : "November" }

61 aDictionary[ 12 ] = "December" # add item to dictionary

62

63 print "The raw dictionary data is:", aDictionary

64 print "\nThe entries in the dictionary are:"

65

66 for item in aDictionary.keys():

67 print "aDictionary[ ", item, " ] = ", aDictionary[ item ]

Page 17: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

The first item in the tuple is 1 The second item in the tuple is a The third item in the tuple is 3.0 The first item in the tuple is 1 The second item in the tuple is a The third item in the tuple is 3.0 Used the += statement on the tuple The raw tuple data is: (1, 'a', 3.0, 4) The items in the tuple are: 1 a 3.0 4 The raw list data is: [0, 2, 3, 5] Added an item to the list using the += statement The items in the list are: 0 2 3 5 4 The raw dictionary data is: {12: 'December', 11: 'November', 10: 'October', 9: 'September', 8: 'August', 7: 'July', 6: 'June', 5: 'May', 4: 'April', 3: 'March', 2: 'February', 1: 'January'} The entries in the dictionary are: aDictionary[ 12 ] = December aDictionary[ 11 ] = November aDictionary[ 10 ] = October aDictionary[ 9 ] = September aDictionary[ 8 ] = August aDictionary[ 7 ] = July aDictionary[ 6 ] = June aDictionary[ 5 ] = May aDictionary[ 4 ] = April aDictionary[ 3 ] = March aDictionary[ 2 ] = February aDictionary[ 1 ] = January

Page 18: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.3  Tuples, Lists and Dictionaries

Method Purpose append( item ) Inserts item at the end of the list. count( item ) Returns the number of occurrences of item in the list. extend( newList ) Inserts newList at the end of the list. index( item ) Returns the index of the first occurrence of item in the list.

If the element is not in the list, a ValueError exception occurs. [Note: We discuss exceptions in Section 35.5]

insert( index, item )

Inserts item at position index.

pop( [index] ) Removes and returns the last element in the list. If parameter index is specified, removes and returns the element at position index.

remove( item ) Removes the first occurrence of item from the list. If item is not in the list, a ValueError exception occurs.

reverse() Reverses the items in the list. sort( [function] ) Sorts the items in the list. Optional parameter function is a

comparison function that may be user defined. Fig. 35.8 Python list methods.

Page 19: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.3  Tuples, Lists and Dictionaries

Method Description clear() Deletes all items from the dictionary. copy() Creates a copy of the dictionary. get( key [, falseValue] ) Returns the value associated with key. If key is not

in the dictionary and if falseValue is specified, returns the specified value.

has_key( key ) Returns 1 if key is in the dictionary; returns 0 if key is not in the dictionary.

items() Returns a list of tuples that are key-value pairs. keys() Returns a list of keys in the dictionary. setdefault( key [, falseValue] )

Behaves similarly to method get. If key is not in the dictionary and falseValue is specified, inserts the key and the specified value into the dictionary.

update( otherDictionary ) Adds all the key-value pairs from otherDictionary to the current dictionary.

values() Returns a list of values in the dictionary. Fig. 35.9 Dictionary methods.

Page 20: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.4  String Processing and Regular Expressions

• Regular expression– Used to search through strings, text files, databases, and so

on

• Regular-expression string– Defines a pattern with which text data can be compared

Page 21: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_10.py(1 of 2)

1 # Fig. 35.10: fig35_10.py

2 # Program to illustrate use of strings

3

4 # simple string assignments

5 string1 = "This is a string."

6 print string1

7

8 string2 = "This is a second string."

9 print string2

10

11 # string concatenation

12 string3 = string1 + " " + string2

13 print string3

14

15 # using operators

16 string4 = '*'

17 print "String with an asterisk: " + string4

18 string4 *= 10

19 print "String with 10 asterisks: " + string4

20

21 # using quotes

22 print "This is a string with \"double quotes.\""

23 print 'This is another string with "double quotes."'

24 print 'This is a string with \'single quotes.\''

25 print "This is another string with 'single quotes.'"

Page 22: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_10.py(2 of 2)

26 print """This string has "double quotes" and 'single quotes.'"""

27

28 # string formatting

29 name = raw_input( "Enter your name: " )

30 age = raw_input( "Enter your age: " )

31 print "Hello, %s, you are %s years old." % ( name, age )

This is a string. This is a second string. This is a string. This is a second string. String with an asterisk: * String with 10 asterisks: ********** This is a string with "double quotes." This is another string with "double quotes." This is a string with 'single quotes.' This is another string with 'single quotes.' This string has "double quotes" and 'single quotes.' Enter your name: Brian Enter your age: 33 Hello, Brian, you are 33 years old.

Page 23: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.4  String Processing and Regular Expressions

Symbol Meaning c Single character (i.e., a string of length 1). s String. d Signed decimal integer. u Unsigned decimal integer. o Unsigned octal integer. x Unsigned hexadecimal integer (using format abcdef). X Unsigned hexadecimal integer (using format ABCDEF). f Floating-point number. e, E Floating-point number (using scientific notation). g, G Floating-point number (using least-significant digits). Fig. 35.11 String-format characters.

Page 24: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_12.py(1 of 2)

1 # Fig. 35.12: fig35_12.py

2 # Program searches a string using the regular expression module.

3

4 import re

5

6 searchString = "Testing pattern matches"

7

8 expression1 = re.compile( r"Test" )

9 expression2 = re.compile( r"^Test" )

10 expression3 = re.compile( r"Test$" )

11 expression4 = re.compile( r"\b\w*es\b" )

12 expression5 = re.compile( r"t[aeiou]", re.I )

13

14 if expression1.search( searchString ):

15 print '"Test" was found.'

16

17 if expression2.match( searchString ):

18 print '"Test" was found at the beginning of the line.'

19

20 if expression3.match( searchString ):

21 print '"Test" was found at the end of the line.'

22

23 result = expression4.findall( searchString )

24

Page 25: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_12.py(2 of 2)

25 if result:

26 print 'There are %d words(s) ending in "es":' % \

27 ( len( result ) ),

28

29 for item in result:

30 print " " + item,

31

32 print

33 result = expression5.findall( searchString )

34

35 if result:

36 print 'The letter t, followed by a vowel, occurs %d times:' % \

37 ( len( result ) ),

38

39 for item in result:

40 print " " + item,

41

42 print

Page 26: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.4  String Processing and Regular Expressions

Character Matches ^ Beginning of string. $ End of string. . Any character, except a newline. * Zero or more occurrences of the pattern. + One or more occurrences of the preceding pattern. ? Zero or one occurrence of the preceding pattern. {m, n} Between m and n occurrences of the preceding pattern. \b Word boundary (i.e., the beginning or end of a word). \B Nonword boundary. \d Digit ([0–9]). \D Nondigit. \w Any alpha-numeric character. [...] Any character defined by the set. [^...] Any character not defined by the set. Fig. 35.13 re module’s regular-expression characters.

Page 27: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.5  Exception Handling

• Enables programs and programmers to identify an error when it occurs and take appropriate action

• try…except blocks

Page 28: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.5  Exception Handling

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. >>> 1 / 0 Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>>

Fig. 35.14 Interactive session illustrating a ZeroDivisionError exception.

Page 29: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_15.py(1 of 1)

1 # Fig. 35.15: fig35_15.py

2 # A simple program that illustrates exceptions.

3

4 def getFloat():

5 return float( raw_input( "Enter a number: " ) )

6

7 number1 = number2 = None

8

9 while number1 == None:

10 try:

11 number1 = getFloat()

12 except ValueError:

13 print "Value entered was not a number"

14

15 while number2 == None:

16 try:

17 number2 = getFloat()

18 except ValueError:

19 print "Value entered was not a number"

20

21 try:

22 result = number1 / number2

23 except ZeroDivisionError:

24 print "Cannot divide by zero!"

25 else:

26 print "The result of division is: %f" % result

Page 30: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.6  Introduction to CGI Programming

• Use Python on the Web– cgi

• For access to XHTML forms• Directive (pound-bang or Shebang)

– Provides server with location of Python executable• cgi module

– Provides functionalities for writing CGI scripts• environ data member

– Holds all environment variables

– Cookie• To read and write cookies

– smtplib• To manipulate SMTP messages

– urllib• To manipulate Web data

– ftplib• To perform client-side FTP tasks

Page 31: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_16.py(1 of 2)

1 #!c:\Python\python.exe

2 # Fig 35.16: fig35_16.py

3 # Program to display CGI environment variables

4

5 import os

6 import cgi

7

8 print "Content-type: text/html"

9 print

10

11 print """<!DOCTYPE html PUBLIC

12 "-//W3C//DTD XHTML 1.0 Transitional//EN"

13 "DTD/xhtml1-transitional.dtd">"""

14

15 print """

16 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

17 lang="en">

18 <head><title>Environment Variables</title></head>

19 <body><table style = "border: 0">"""

20

21 rowNumber = 0

22

23 for item in os.environ.keys():

24 rowNumber += 1

25

Page 32: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_16.py(2 of 2)

26 if rowNumber % 2 == 0:

27 backgroundColor = "white"

28 else:

29 backgroundColor = "lightgrey"

30

31 print """<tr style = "background-color: %s">

32 <td>%s</td><td>%s</td></tr>""" \

33 % ( backgroundColor, item,

34 cgi.escape( os.environ[ item ] ) )

35

36 print """</table></body></html>"""

Page 33: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.7  Form Processing and Business Logic

• XHTML forms– Allow users to enter data to be sent to a Web server for

processing

Page 34: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_17.html(1 of 3)

1 <!DOCTYPE html PUBLIC

2 "-//W3C//DTD XHTML 1.0 Transitional//EN"

3 "DTD/xhtml1-transitional.dtd">

4 <!-- Fig. 35.17: fig35_17.html -->

5

6 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

7 lang="en">

8 <head>

9 <title>Sample FORM to take user input in HTML</title>

10 </head>

11

12 <body style = "font-family: Arial, sans-serif; font-size: 11pt">

13

14 <div style = "font-size: 15pt; font-weight: bold">

15 This is a sample registration form.

16 </div>

17 Please fill in all fields and click Register.

18

19 <form method = "post" action = "/cgi-bin/fig35_18.py">

20 <img src = "images/user.gif" alt = "user" /><br />

21 <div style = "color: blue">

22 Please fill out the fields below.<br />

23 </div>

24

25 <img src = "images/fname.gif" alt = "firstname" />

Page 35: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_17.html(2 of 3)

26 <input type = "text" name = "firstname" /><br />

27 <img src = "images/lname.gif" alt = "lastname" />

28 <input type = "text" name = "lastname" /><br />

29 <img src = "images/email.gif" alt = "email" />

30 <input type = "text" name = "email" /><br />

31 <img src = "images/phone.gif" alt = "phone" />

32 <input type = "text" name = "phone" /><br />

33

34 <div style = "font-size: 8pt">

35 Must be in the form (555)555-5555<br/><br/>

36 </div>

37

38 <img src = "images/downloads.gif" alt = "downloads" /><br />

39 <div style = "color: blue">

40 Which book would you like information about?<br />

41 </div>

42

43 <select name = "book">

44 <option>XML How to Program</option>

45 <option>Python How to Program</option>

46 <option>E-business and E-commerce How to Program</option>

47 <option>Internet and WWW How to Program 3e</option>

48 <option>C++ How to Program 4e</option>

49 <option>Java How to Program 5e</option>

50 <option>Visual Basic How to Program</option>

Page 36: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_17.html(3 of 3)

51 </select>

52 <br /><br />

53

54 <img src = "images/os.gif" alt = "os" /><br />

55 <div style = "color: blue">

56 Which operating system are you

57 currently using?<br />

58 </div>

59

60 <input type = "radio" name = "os" value = "Windows XP"

61 checked = "checked" />

62 Windows XP

63 <input type = "radio" name = "os" value = "Windows 2000" />

64 Windows 2000

65 <input type = "radio" name = "os" value = "Windows 95_98" />

66 Windows 95/98/ME<br />

67 <input type = "radio" name = "os" value = "Linux" />

68 Linux

69 <input type = "radio" name = "os" value = "Other" />

70 Other<br />

71 <input type = "submit" value = "Register" />

72

73 </form>

74 </body>

75 </html>

Page 37: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

Page 38: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_18.py(1 of 4)

1 #!c:\Python\python.exe

2 # Fig. 35.18: fig35_18.py

3 # Program to read information sent to the server from the

4 # form in the form.html document.

5

6 import cgi

7 import re

8

9 # the regular expression for matching most US phone numbers

10 telephoneExpression = \

11 re.compile( r'^\(\d{3}\)\d{3}-\d{4}$' )

12

13 def printContent():

14 print "Content-type: text/html"

15 print

16 print """

17 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

18 lang="en">

19 <head><title>Registration results</title></head>

20 <body>"""

21

22 def printReply():

23 print """

24 Hi <span style = "color: blue; font-weight: bold">

25 %(firstName)s</span>.

Page 39: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_18.py(2 of 4)

26 Thank you for completing the survey.<br />

27 You have been added to the <span style = "color: blue;

28 font-weight: bold">%(book)s </span> mailing list.<br /><br />

29

30 <span style = "font-weight: bold">

31 The following information has been saved in our database:

32 </span><br />

33

34 <table style = "border: 0; border-width: 0;

35 border-spacing: 10">

36 <tr><td style = "background-color: yellow">Name </td>

37 <td style = "background-color: yellow">Email</td>

38 <td style = "background-color: yellow">Phone</td>

39 <td style = "background-color: yellow">OS</td></tr>

40

41 <tr><td>%(firstName)s %(lastName)s</td><td>%(email)s</td>

42 <td>%(phone)s</td><td>%(os)s</td></tr>

43 </table>

44

45 <br /><br /><br />

46

47 <div style = "text-align: center; font-size: 8pt">

48 This is only a sample form.

49 You have not been added to a mailing list.

50 </div></center>

Page 40: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_18.py(3 of 4)

51 """ % personInfo

52

53 def printPhoneError():

54

55 print """<span style = "color: red; font-size 15pt">

56 INVALID PHONE NUMBER</span><br />

57 A valid phone number must be in the form

58 <span style = "font-weight: bold">(555)555-5555</span>

59 <span style = "color: blue"> Click the Back button,

60 enter a valid phone number and resubmit.</span><br /><br />

61 Thank You."""

62

63 def printFormError():

64

65 print """<span style = "color: red; font-size 15pt">

66 FORM ERROR</span><br />

67 You have not filled in all fields.

68 <span style = "color: blue"> Click the Back button,

69 fill out the form and resubmit.</span><br /><br />

70 Thank You."""

71

72 printContent()

73

74 form = cgi.FieldStorage()

75

Page 41: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_18.py(4 of 4)

76 try:

77 personInfo = { 'firstName' : form[ "firstname" ].value,

78 'lastName' : form[ "lastname" ].value,

79 'email' : form[ "email" ].value,

80 'phone' : form[ "phone" ].value,

81 'book' : form[ "book" ].value,

82 'os' : form[ "os" ].value }

83 except KeyError:

84 printFormError()

85

86 if telephoneExpression.match( personInfo[ 'phone' ] ):

87 printReply()

88 else:

89 printPhoneError()

Page 42: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.8  Cookies

• Small text files– State information

• Username

• Password

• Specific information helpful when user returns

• Etc.

Page 43: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_19.html(1 of 2)

1 <!DOCTYPE html PUBLIC

2 "-//W3C//DTD XHTML 1.0 Transitional//EN"

3 "DTD/xhtml1-transitional.dtd">

4 <!-- Fig. 35.19: fig35_19.html -->

5

6 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en"

7 lang = "en">

8 <head>

9 <title>Writing a cookie to the client computer</title>

10 </head>

11

12 <body style = "background-image: images/back.gif;

13 font-family: Arial,sans-serif; font-size: 11pt" >

14

15 <span style = "font-size: 15pt; font-weight: bold">

16 Click Write Cookie to save your cookie data.

17 </span><br />

18

19 <form method = "post" action = "/cgi-bin/fig35_20.py">

20 <span style = "font-weight: bold">Name:</span><br />

21 <input type = "text" name = "name" /><br />

22 <span style = "font-weight: bold">Height:</span><br />

23 <input type = "text" name = "height" /><br />

24 <span style = "font-weight: bold">Favorite Color</span><br />

25 <input type = "text" name = "color" /><br />

Page 44: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_19.html(2 of 2)

26 <input type = "submit" value = "Write Cookie" />

27 </form>

28

29 </body>

30 </html>

Page 45: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_20.py(1 of 3)

1 #!C:\Python\python.exe

2 # Fig. 35.20: fig35_20.py

3 # Writing a cookie to a client's machine

4

5 import cgi

6 import Cookie

7 import time

8

9 def printContent():

10 print "Content-type: text/html"

11 print

12 print """

13 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

14 lang="en">

15 <head><title>Cookie values</title></head>"""

16

17 form = cgi.FieldStorage() # get form information

18

19 try: # extract form values

20 name = form[ "name" ].value

21 height = form[ "height" ].value

22 color = form[ "color" ].value

23 except KeyError:

24 printContent()

25 print """<body><h3>You have not filled in all fields.

Page 46: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_20.py(2 of 3)

26 <span style = "color: blue"> Click the Back button,

27 fill out the form and resubmit.<br /><br />

28 Thank You. </span></h3>"""

29 else:

30

31 # construct cookie expiration date and path

32 expirationFormat = "%A, %d-%b-%y %X %Z"

33 expirationTime = time.localtime( time.time() + 300 )

34 expirationDate = time.strftime( expirationFormat,

35 expirationTime )

36 path = "/"

37

38 # construct cookie contents

39 cookie = Cookie.SimpleCookie()

40

41 cookie[ "Name" ] = name

42 cookie[ "Name" ][ "expires" ] = expirationDate

43 cookie[ "Name" ][ "path" ] = path

44

45 cookie[ "Height" ] = height

46 cookie[ "Height" ][ "expires" ] = expirationDate

47 cookie[ "Height" ][ "path" ] = path

48

49 cookie[ "Color" ] = color

50 cookie[ "Color" ][ "expires" ] = expirationDate

Page 47: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_20.py(3 of 3)

51 cookie[ "Color" ][ "path" ] = path

52

53 # print cookie to user and page to browser

54 print cookie

55

56 printContent()

57 print """<body style = "background-image: /images/back.gif;

58 font-family: Arial,sans-serif; font-size: 11pt">

59 The cookie has been set with the following data: <br /><br />

60

61 <span style = "color: blue">Name:</span> %s<br />

62 <span style = "color: blue">Height:</span> %s<br />

63 <span style = "color: blue">Favorite Color:</span>

64 <span style = "color: %s"> %s</span><br />""" \

65 % ( name, height, color, color )

66

67 print """<br /><a href= "fig35_21.py">

68 Read cookie values</a>"""

69

70 print """</body></html>"""

Page 48: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

Page 49: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_21.py(1 of 2)

1 #!C:\Python\python.exe

2 # Fig. 35.21: fig35_21.py

3 # Program that retrieves and displays client-side cookie values

4

5 import Cookie

6 import os

7

8 print "Content-type: text/html"

9 print

10 print """

11 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

12 lang="en">

13 <head><title>Cookie values</title></head>

14 <body style =

15 font-family: Arial, sans-serif; font-size: 11pt">"""

16

17 try:

18 cookie = Cookie.SimpleCookie()

19 cookie.load( os.environ[ "HTTP_COOKIE" ] )

20 except KeyError:

21 print """<span style = "font-weight: bold">Error reading cookies

22 </span>"""

23 else:

24 print """<span style = "font-weight: bold">

25 The following data is saved in a cookie on your computer.

Page 50: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_21.py(2 of 2)

26 </span><br /><br />"""

27

28 print """<table style = "border-width: 5; border-spacing: 0;

29 padding: 10">"""

30

31 for item in cookie.keys():

32 print """<tr>

33 <td style = "background-color: lavender">%s</td>

34 <td style = "background-color: white">%s</td>

35 </tr>""" % ( item, cookie[ item ].value )

36

37 print """</table>"""

38

39 print """</body></html>"""

Page 51: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.9  Database Application Programming Interface (DB-API)

• Python Database Special Interest Group (SIG)– Formed to develop a specification for Python database

application programming interface (DB-API)

Page 52: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.9.1 Setup

• MySQL and the MySQLdb module must be installed

Page 53: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.9.2 Simple DB-API Program

• Lets user choose an author from XHTML drop-down list

• User clicks button to query database• Database query returns a list of all books by

author

Page 54: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_22.py(1 of 2)

1 #!c:\Python\python.exe

2 # Fig. 35.22: fig35_22.py

3 # A program to illustrate Python's database connectivity.

4 import MySQLdb

5

6 print "Content-type: text/html"

7 print

8 print """

9 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

10 lang="en">

11 <head><title>Select Author</title></head>

12 <body style =

13 font-family: Arial, sans-serif; font-size: 11pt">"""

14

15 try:

16 connection = MySQLdb.connect( db = "books" )

17 except OperationalError:

18 print "Unable to connect to database: %s" % message

19 else:

20 cursor = connection.cursor()

21 cursor.execute( "SELECT * FROM Authors" )

22 authorList = cursor.fetchall()

23

24 cursor.close() # close cursor

25 connection.close() # close connection

Page 55: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_22.py(2 of 2)

26

27 print """

28 <form method = "post" action = "/cgi-bin/fig35_23.py">

29 <select name = "authorID">"""

30

31 for author in authorList:

32 print """<option value = %d>%s, %s</option>""" \

33 % ( author[ 0 ], author[ 2 ], author[ 1 ] )

34

35 print """

36 </select>

37 <input type = "submit" value = "Execute Query" />

38 </ form>"""

39

40 print """</body></html>"""

Page 56: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_23.py1 of 3

1 #!c:\Python\python.exe

2 # Fig. 35.23: fig35_23.py

3 # A program to illustrate Python's database connectivity.

4

5 import cgi

6 import MySQLdb

7 import sys

8

9 # get results from form

10 form = cgi.FieldStorage()

11

12 print "Content-type: text/html"

13 print

14 print """

15 <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

16 lang="en">

17 <head><title>Query results</title></head>

18 <body style =

19 font-family: Arial, sans-serif; font-size: 11pt">"""

20

21 try:

22 authorID = form[ "authorID" ].value

23 except KeyError:

24 print """<span style = "color: red size = 15pt">

25 FORM ERROR</span><br />

Page 57: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_23.py(2 of 3)

26 You did not select an author.<br />

27 <span style = "color: blue"> Click the Back button,

28 fill out the form and resubmit.<br /><br />

29 Thank You.</span></body></html>"""

30 sys.exit()

31

32 # connect to database and get cursor

33 try:

34 connection = MySQLdb.connect( db = 'books' )

35 except OperationalError:

36 print """<span style = "color: red size = 15pt">

37 DATABASE ERROR</span><br /> Unable to connect to database.

38 </body></html>"""

39 sys.exit()

40

41 queryString = """select Titles.* from Titles, AuthorISBN

42 where AuthorISBN.AuthorID=%s and

43 Titles.ISBN=AuthorISBN.ISBN""" % authorID

44

45 cursor = connection.cursor()

46 cursor.execute( queryString )

47

48 results = cursor.fetchall()

49

50 cursor.close() # close cursor

Page 58: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc.All rights reserved.

OutlineOutline

fig35_23.py(3 of 3)

51 connection.close() # close connection

52

53 # display results

54 print """<table style = "border: groove 2 pt;

55 border-colapse: separate">

56 <tr>

57 <th>ISBN</th>

58 <th>Title</th>

59 <th>Edition</th>

60 <th>Year</th>

61 <th>Description</th>

62 <th>Publisher ID</th>

63 </tr>"""

64

65 for row in results:

66 print "<tr>"

67

68 for entry in row:

69 print '<td style = "border: solid 2pt">%s</td>' % entry

70

71 print "</tr>"

72

73 print """</table></body></html>"""

Page 59: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

Page 60: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.10  Operator Precedence Chart

Operator Type Associativity ' ' string conversion left to right

{ } dictionary creation left to right [ ] list creation left to right ( ) tuple creation or expression grouping left to right ( ) function call left to right [ : ] slicing left to right [ ] subscript access left to right . member access left to right ** exponentiation right to left ~ bitwise NOT left to right + -

unary plus unary minus

right to left

* / %

multiplication division modulus (remainder)

left to right

Fig. 35.24 Python operator precedence chart.

Page 61: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.10  Operator Precedence Chart

Operator Type Associativity + -

addition subtraction

left to right

<< >>

left shift right shift

left to right

& bitwise AND left to right ^ bitwise XOR left to right | bitwise OR left to right < <= > >= != ==

less than less than or equal greater than greater than or equal not equal equal

left to right

Fig. 35.24 Python operator precedence chart.

Page 62: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.10  Operator Precedence Chart

Operator Type Associativity is, is not identity left to right

in, not in membership tests left to right not boolean NOT left to right and boolean AND left to right or boolean OR left to right lambda lambda expressions (anonymous

functions) left to right

Fig. 35.24 Python operator precedence chart.

Page 63: 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction 35.1.1First Python Program 35.1.2Python Keywords 35.2 Basic

2004 Prentice Hall, Inc. All rights reserved.

35.11  Web Resources

• www.python.org• www.zope.com• www.zope.org• starship.python.net• www.python.org/download/download_mac.html• www.vex.net/parnassus• www.pythonware.com• starship.python.net/crew/davem/cgifaq/faqw.cgi• www.devshed.com/Server_Side/Python/CGI• starship.python.net/crew/aaron_watters/pws.html• www.python.org/doc/howto/regex/regex.html• www.python.org/windows/win32com• gadfly.sourceforge.net• aspn.activestate.com/ASPN/Python/Cookbook• www.python.org/windows/win32/odbc.html• starship.python.net/crew/bwilk/access.html• www.python.org/doc/Comparisons.html• www.vic.auug.org.au/auugvic/av_paper_python.html• www.networkcomputing.com/unixworld/tutorial/005/005.html