#!/usr/local/bin/python
#
# CGIGres95
#
# This CGI script implements a general
# query on any single PostGres95
# table/view from an HTML form.
# Michel Vanaken (Michel.Vanaken@ping.be) - 03
# August 1996
from pg95ext import *
from pgtools import *
import cgi
def print_header( TableName ) :
############
print "Content-type: text/html"
print
print "<HTML>"
print "<Head><Title>Query Result"
print "</Title></Head>"
print "<Body><H1><em>", TableName ,"
print "</em> Query Result</H1><hr>"
def display_query( cnx, TableName, qfields, form ) :
#############
print "<P><H3>Query criteria :</H3>"
print "<UL>"
if len( qfields ) = 0 :
print "<LI>Everything"
else :
for h in qfields :
print "<LI>", h, " : ", cgi.escape( form[ h ] )
print "</UL>"
def build_query( cnx, TableName, qfields, form ) :
###########
q = "Select * from " + TableName
if len( qfields ) > 0 :
q = q + " where "
order = None
for h in qfields :
if order is not None :
q = q + " and "
else :
order = " order by " + h
val = form[ h ]
if h[ -3: ] == "num" :
q = q + h + " = " + val
else :
# Faster than a wildcard search when indexed
?
q = q + h + " >= '" + val + "' and " + h +" <
'" + val[ :-1 ] + chr( ord( val[ -1 ] ) + 1 ) + "'"\
q = q + order
return q
def print_results( titles, res ) :
#############
print "<Hr>"
print "<H3>Query result :</H3>"
print "<Table border>"
for t in titles :
print "<th>", cgi.escape( t ), "</th>"
for l in res :
print "<tr>"
for e in l :
print "<td>", cgi.escape( e ), "</td>"
print "</tr>"
print "</Table>"
print "</body></HTML>"
def Main() :
####
form = cgi.SvFormContentDict()
# Work on which table ?
if form.has_key( 'TableName' ) :
TableName = form[ 'TableName' ]
else :
print "<html><body>"
print "Query which table ?"
print "</body></html>"
exit
# Build a list of used fields in the query
fields = form.keys()
fields.remove( 'TableName' )
if form.has_key( 'Submit' ) :
fields.remove( 'Submit' )
elif form.has_key( 'submit' ) :
fields.remove( 'submit' )
elif form.has_key( 'SUBMIT' ) :
fields.remove( 'SUBMIT' )
print_header( TableName )
# Debug
#print fields
#print form.values()
#cgi.print_form( form )
# For user information
cnx = connect()
display_query( cnx, TableName, fields, form )
qs = build_query( cnx, TableName, fields, form )
# For debugging purposes
print "<P>", qs
res = cnx.query( qs )
titles = cnx.listfields()
print_results( titles, res )
#### Start here
Main()
Copyright © 1994 - 2018 Linux Journal. All rights reserved.