I am back developing futher our Python/CGI based web application run by
a Postgres DB
and as per usual I am having some issues. It Involves a lot of Legacy
code. All the actual
SQL Querys are stored in the .py files and run in the .cgi files. I
have the problem that I
need to construct a row from two seprate SQL Querys, I have tried
combining the two
Querys but all that does is create a Query that returns nothing after a
long period running.

the first query results are delimited with [] and the second with {} I
want my result to
return [ val1 ] [ val2 ] [ val3 ] [ val4 ] { valA } { valB }
unfortunatly when i put my second
query in anywhere on the page its crashes and returns a Internal Server
Error.

the functions from the cmi file are below.



def creationSQL(pubID, productCode, description, suppNo1, all):

        validQuery=0

        if all:
                all=int(all[0])
                all = cromwell.toString(all)


        sql='SELECT S.product_code, S.description, S.suppno1,
P.discount_factor, S.status, S.list_price, S.offer_price, P.page_no,
int8(P.oid), S.stock_qty '
        sql=sql+'FROM (medusa.cmi_stockrec AS S INNER JOIN
medusa.cmi_auxstockrec AS A ON S.product_code=A.product_code) LEFT JOIN
medusa.cmi_pricing AS P ON S.product_code=P.product_code AND
P.pub_id='+pubID+' '
        sql=sql+'WHERE '


        if productCode!='':
                sql=sql+cromwell.orSQL('S.product_code', productCode, 'ILIKE 
\'',
'%\'', 1)+' AND '
                print '<div class="main">Product Code: 
<b>'+productCode+'</b></div>'
                validQuery=1
        if description!='':
                sql=sql+' (upper(S.description) LIKE 
upper(\'%'+description+'%\'))
AND '
                print '<div class="main">Description: 
<b>'+description+'</b></div>'
                validQuery=1
        if suppNo1!='':
                sql=sql+' (upper(S.suppno1) LIKE upper(\'%'+suppNo1+'%\')) AND '
                print '<div class="main">Part No: <b>'+suppNo1+'</b></div>'
                validQuery=1
        if all!=pubID:
                sql=sql+' (P.product_code IS NULL) AND '

        sql=sql[:-4]
        sql=sql+' ORDER BY S.product_code'

        print '<!-- SQL (Publication Creation):\n'
        print sql
        print '-->'

        if validQuery==1:
                return sql
        else:
                return ''

def creationPubSQL(pubID, productCode, description, suppNo1, all,
pubList, pubPageNo):

        validQuery=0

        if all:
                all=int(all[0])
                all = cromwell.toString(all)


        sql='SELECT Pl.product_code, S.description, S.suppno1,
P.discount_factor, S.status, Pl.list_price, Pl.offer_price, P.page_no,
int8(P.oid), Pl.page_no, S.stock_qty '
        sql=sql+'FROM ((medusa.cmi_pricing AS Pl INNER JOIN
medusa.cmi_stockrec AS S ON S.product_code=Pl.product_code) INNER JOIN
medusa.cmi_auxstockrec AS A ON S.product_code=A.product_code) LEFT JOIN
medusa.cmi_pricing AS P ON S.product_code=P.product_code AND
P.pub_id='+pubID+' '
        sql=sql+'WHERE Pl.pub_id='+pubList+' AND '

        if productCode!='':
                sql=sql+cromwell.orSQL('Pl.product_code', productCode, 'ILIKE 
\'',
'%\'', 1)+' AND '
                print '<div class="main">Product Code: 
<b>'+productCode+'</b></div>'
                validQuery=1
        if description!='':
                sql=sql+' (upper(S.description) LIKE 
upper(\'%'+description+'%\'))
AND '
                print '<div class="main">Description: 
<b>'+description+'</b></div>'
                validQuery=1
        if suppNo1!='':
                sql=sql+' (upper(S.suppno1) LIKE upper(\'%'+suppNo1+'%\')) AND '
                print '<div class="main">Part No: <b>'+suppNo1+'</b></div>'
                validQuery=1
        if pubPageNo!='':
                sql=sql+cromwell.orSQL('Pl.page_no', pubPageNo, '=\'', '\'', 
1)+' AND
'
                print '<div class="main">Publication Page No:
<b>'+pubPageNo+'</b></div>'
                validQuery=1
        if all!=pubID:
                sql=sql+' (P.product_code IS NULL) AND '

        sql=sql[:-4]
        sql=sql+' ORDER BY Pl.product_code'

        print '<!-- SQL (Publication Creation):\n'
        print sql
        print '-->'

        if validQuery==1:
                return sql
        else:
                return ''


def stockdetailsSQL(productCode):

        validQuery=0

        sql="SELECT (stkphys - stkalloc) as free_stock, stk_qty_wk, stkalloc,
stkordq, r.fd_deliverydue "
        sql=sql+'FROM charisma.sk_stklfl LEFT JOIN
progress.report_firstdelivery as r ON stkl_stockno = r.fd_sordstk '
        sql=sql+'WHERE stkl_stockno = \''+productCode+'\' AND stkl_location =
\'081\' ORDER BY stkl_stockno'
        validQuery=1

        sql=sql[:-4]

        print '<!-- SQL (stock details):\n'
        print sql
        print '-->'


        if validQuery==1:
                return sql
        else:
                return ''


The page code for the CGI file that genereates the tables

#!/usr/bin/python

# Creation Screen
# MeDuSa - Marketing Data System

# $Id: creation.cgi 54 2006-02-16 11:32:12Z
[EMAIL PROTECTED] $


print 'Content-Type: text/html\n\n'


import sys
sys.stderr = sys.stdout

from pyPgSQL import libpq
import cgi
import string
import os
import cmi
import cromwell

import hermes
conn = hermes.db()


# This will allow us to retrieve submitted form fields.
cgiForm=cgi.FieldStorage()



# Start assigning submitted form fields to variables.
submit=cgiForm.getvalue('submit')
pubID=cgiForm.getvalue('pubID')
pubName=cgiForm.getvalue('pubName','Unknown Publication')

sqlcheck1 = "SELECT pub_type FROM medusa.cmi_publication WHERE pub_id =
'"+pubID+"'"
overseas1 = conn.query(sqlcheck1)
pubType = cmi.fetch_rows(overseas1)

print pubType

# Check to find out which Search button was pressed ('Search' or
'Search ' )
# before assigning submitted form fields to variables.
if submit=='Search ':
        productCode=cromwell.unhypCode(cgiForm.getvalue('productCode2', ''))
        description=cgiForm.getvalue('description2','')
        suppNo1=cgiForm.getvalue('suppNo12', '')
        pageNo=cgiForm.getvalue('pageNo2', '')
        pubList=cgiForm.getvalue('pubList2', '800')
        pubPageNo=cgiForm.getvalue('pubPageNo2', '')

        all=cgiForm.getvalue('all2')
        if (all==None):
                all=[]
        elif not (type(all) is type([])):
                all=[all]

else:
        productCode=cromwell.unhypCode(cgiForm.getvalue('productCode', ''))
        description=cgiForm.getvalue('description','')
        suppNo1=cgiForm.getvalue('suppNo1', '')
        pageNo=cgiForm.getvalue('pageNo', '')
        pubList=cgiForm.getvalue('pubList', '800')
        pubPageNo=cgiForm.getvalue('pubPageNo', '')

        all=cgiForm.getvalue('all')
        if (all==None):
                all=[]
        elif not (type(all) is type([])):
                all=[all]



# Return list of checked product codes.
codes=cgiForm.getvalue('codes')
if (codes==None):
        codes=[]
elif not (type(codes) is type([])):
        codes=[codes]




# Perform a SELECT query to produce publication list.
result = conn.query('SELECT pub_name, pub_status, pub_id, pub_type FROM
cmi_publication WHERE (pub_status < 4) AND (pub_id > 0) ORDER BY
pub_status, pub_type, pub_name')
rows = cmi.fetch_rows(result)

pubs=[(800, 'Charisma')]


# Create a publication list array.
for row in rows:
        listPubName=row[0]
        listPubID=row[2]

        pubs.append((listPubID, listPubName))



# Start printing the HTML page.
print '<html>'
print '<head>'
print '<title>MEDUSA</title>'
print '<LINK REL ="stylesheet" TYPE="text/css"
HREF="/styles/medusa.css" TITLE="Style">'
print '</head>'

print '<body link="#000080" alink="#000080" vlink="#000080"
topmargin=0>'
print '<form method=post>'



# Produce the search form at the top of the page and the publication
title below.
banner=cmi.printCreateHeader(1, 'creation', pubID, ['ProductCode',
'Description', 'PartNo', 'All'], pubName, productCode, description,
suppNo1, pageNo, pubList, all, pubs, pubPageNo)


# If a button other than Search was pressed then perform the related
query.
add_page=cgiForm.getvalue('add_page')
if (submit=='Add') or (add_page):

        for row in codes:
                list_code=row[0:11]
                list_code = "\'" + list_code + "\'"

                sql=cmi.addSQL(pubID, list_code, add_page)
                if sql:
                        conn.query(sql)



pubListTmp = int(pubList)


# Perform the SELECT query to produce the page content based on whether
a publication has been selected or not.
if (pubListTmp==800):
        sql=cmi.creationSQL(pubID, productCode, description, suppNo1, all)
else:
        sql=cmi.creationPubSQL(pubID, productCode, description, suppNo1, all,
pubList, pubPageNo)



print '</p>'

# If a valid SELECT query has been created then display the results.
if sql:

        # Execute the SELECT query.
        result = conn.query(sql)
        rows = cmi.fetch_rows(result)


        # If the query has returned any results.
        if rows:

                # Create Edit form elements.
                print '<p>Page No. <input type=text name=add_page size=5> <input
type=submit name=submit value=Add><hr></p>'


                # Print key.
                cmi.printCreateKey()


                # Print structure table.
                print '<table class=clear>'
                print '<tr>'



                # Print left hand column.
                print '<td class=clear>'

                print '<table cellpadding=3 cellspacing=1>'
                print '<tr>'

                # Print the table headers.
                print '<th>Product<br>Code</th>'
                print '<th>S</th>'
                print '<th><input type=submit name=submit value=All ></th>'
                print '<th>Description</th>'
                print '<th>Supp.<br>Part No.</th>'
                print '<th>Charisma<br>List</th>'
                #print '<th>Charisma<br>Offer</th>'
                print '<th>Last Cat<br>Discount</th>'
                print '<th>Page<br>No</th>'
                if (pubListTmp!=800):
                        print '<th>Pub<br>Page</th>'
                print '<th>Stock Qty<br>Loc 81</th>'

                print '</tr>'

                matched=0
                lastGroup=''


                # Loop to print one line for each return from the database.
                for row in rows:


                        # Assign the column values to named variables.
                        productCode=row[0]
                        description=row[1]
                        suppNo1=cromwell.notNone(row[2], '')
                        discount=row[3]
                        if discount==None:
                                discount='0'
                        else:
                                discount=cromwell.percentage(discount)
                        status=cromwell.notNone(row[4], '')
                        charList=cromwell.price(row[5], pubType)
                        charOffer=cromwell.price(row[6], pubType)
                        pageNo=cromwell.toString(row[7])
                        oid=cromwell.toString(row[8])
                        if (pubListTmp!=800):
                                pubPage=cromwell.toString(row[9])
                                stock=cromwell.toString(row[10])
                        else:
                                stock=cromwell.toString(row[9])



                        # Display a seperator between groups of product codes.
                        if lastGroup!=productCode[:6]:
                                if lastGroup!='':
                                        print '<tr height=3><th 
colspan=8></th></tr>'
                                lastGroup=productCode[:6]



                        print '<tr>'

                        # Print a table row.
                        print '<td class='+cmi.pageStatusClass(pageNo, status)+'
align=left><a href="#"
onclick=\'javascript:window.open("http://ecatalogue.cromwell-tools.co.uk/details.php?product_code='+productCode+'&location=81","","scrollbars=yes,resizable=Yes,width=650,height=800")\'><b>'+cromwell.hypCode(productCode)+'</b></a></td>'
                        print '<td class='+cmi.pageStatusClass(pageNo, status)+'
align=left>'+status+'</td>'
                        print '<td class='+cmi.pageClass(pageNo)+' 
align=center><input
type=checkbox name=codes value='
                        print productCode+' '
                        if (cgiForm.getvalue('submit')=='All') or (productCode 
in codes):
                                print ' CHECKED',
                        print '></td>'
                        print '<td class='+cmi.pageClass(pageNo)+'
align=left>'+description+'</td>'
                        print '<td class='+cmi.pageClass(pageNo)+'
align=left>'+suppNo1+'</td>'
                        print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+charList+'</td>'
                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+charOffer+'</td>'
                        print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+discount+'%</td>'
                        print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+pageNo+'</td>'
                        if (pubListTmp!=800):
                                print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+pubPage+'</td>'

###################################################
#
#     This is the section that generates the second sql string
#
####################################################


                        #sqlS=cmi.stockdetailsSQL(productCode)
                        #print sqlS
                        #rowsS = cmi.fetch_rows(sqlS)
                                for rowS in rowsS:
                        #                       
freestock=cromwell.toString(rowS[0])
                        #                       
stkqweeks=cromwell.toString(rowS[1])
                        #                       
allocated=cromwell.toString(rowS[2])
                        #                       
stkorderq=cromwell.toString(rowS[3])
                        #                       
orderdate=cromwell.toString(rowS[4])

                        #                       print ''+freestock+''
                        #                       print ''+stkqweeks+''
                        #                       print ''+allocated+''
                        #                       print ''+stkorderq+''
                        #                       print ''+orderdate+''

                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+freestock+'</td>'
                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+stkqweeks+'</td>'
                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+allocated+'</td>'
                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+stkorderq+'</td>'
                        #print '<td class='+cmi.pageClass(pageNo)+'
align=right>'+orderdate+'</td>'

                        print '</tr>'

                        matched=matched+1

                print '</table>'

                print '<p><b>'+`matched`+'</b> items found</p>'


                # End left hand column.
                print '</td>'


                # Print spacer column.
                print '<td class=clear width=50>&nbsp</td>'


                # Print right hand column.
                print '<td class=clear valign=top>'

                print '<b>Just added:</b><br>'
                for code in codes:
                        print '&nbsp'*5, code, '<br>'

                # End right hand column.
                print '</td>'
                print '</tr>'



                # Close the table.
                print '</table>'



        # If no results are returned by the query.
        else:
                print '<p align="center"><font color=red><b>No items
found</b></font></p>'




# If a valid query has not been created (No search details entered).
else:

        print '<table width="100%" height="500"
class="clear"><tr><td><h1>Creation Page</h1></td></tr></table>'



# Close HTML tags.
print '</form>'
print '</body>'
print '</html>'

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to