2015-06-20 40 views
-1

我编写了一些python来查询Oracle数据库,并且当我用浏览器查看时,我希望它将结果打印在格式化的HTML表格中。我不确定如何做到这一点。将python数据库查询打印到HTML文档

我写的蟒蛇是如下:

#!/usr/bin/python2.6 
import imp,datetime 
import cx_Oracle 

def index(): 
    conn_str = u'$USERNAME/[email protected]$HOSTNAME:$PORT/$SERVICENAME' 
    conn = cx_Oracle.connect(conn_str) 
    c = conn.cursor() 
    query = c.execute(u'SELECT $FIELD1, $FIELD2, $FIELD3 FROM $TABLE') 
    cur = c.fetchall() 
    for row in cur: 
     print(str(row)) 


    conn.close() 

我的一个同事有他写的是巨大的资格审查和光标创作方面更复杂的一个类似的脚本,而他使用的“写“在Python中输出。有了他,我至少可以得到输出到一个网页,我不明白为什么我什么都不会显示,更不用说我的查询结果了。问题是他的输出没有格式化,即使我使用他的代码,我也不知道如何给它表结构。

为了对比,他的:

#!/usr/bin/python2.6 
import os 
os.environ["ORACLE_BASE"]="/oracle" 
os.environ["ORACLE_HOME"]="/oracle/product/11.2.0/client_1" 
os.environ["LD_LIBRARY_PATH"]="/oracle/product/11.2.0/client_1/lib:/oracle/product/11.2.0/client_1/dbjava/lib" 
os.environ["TNS_ADMIN"]="/oracle/product/11.2.0/client_1/network/admin" 
import imp,datetime 
import cx_Oracle 

DBCONNECTED="" 
CONNECT={} 

def connect(tnsname): 
    global DBCONNECTED 
    DB={} 
    DB['$DATABASE']=['$USER','$PASSWORD'] 

    #print str(DB[tnsname][0]+"/"+DB[tnsname][1]+"@"+tnsname) 
    conn=cx_Oracle.connect(DB[tnsname][0]+"/"+DB[tnsname][1]+"@"+tnsname) 
    DBCONNECTED+=tnsname+":" 
    return conn 

def getcredentials(env,user): 
    env=env.lower() 
    CRED={};CRED['$DATABASENAME']={}; 
    CRED['$DATABASENAME']['$USERNAME']='$PASSWORD' 
    if env in CRED and user in CRED[env]: 
     return CRED[env][user] 
    else: 
     return 'ERR' 

def returnconnection(dbtns): 
    global CONNECT 
    if DBCONNECTED.find(dbtns+":")==-1: #connection hasn't been initialized, do that 
     CONNECT[dbtns]=connect(dbtns.lower()) 
    cur= CONNECT[dbtns].cursor() 
    return cur 

def runq(dbtns,query,bindvar=''): 
    query=query.replace("\n"," ") 
    cur=returnconnection(dbtns) 
    if bindvar=='': 
     cur.execute(query) 
    else: 
     cur.execute(query,bindvar) 

    rs=cur.fetchall() #this should be fine for up to several thousand rows 
    return rs 

def index (req,rssid=""): 
    global R; R=req; R.content_type="text/html" 
    R.write(""" 
     <!DOCTYPE HTML"> 
     <html><head><title>TABLES</title><META HTTP-EQUIV='Pragma' CONTENT='no-cache'> 
     </head> 
     <table> 
    """) 
    dat=runq('$DATABASE','SELECT $FIELD1, $FIELD2, $FIELD3 FROM $TABLE') 

    for row in dat: 
     R.write(str(row)) 


    #write footer 
    R.write(""" 
    </table> 
    </body></html> 
    """) 

我喜欢我写的简单,但我的同事显然是做正确的事情吐输出到一个页面。当我尝试重新创建“Global R”来调用“R.write”时,我得到了一个关于content_type模块的unicode错误,这看起来很奇怪。

无论如何,我觉得这应该是非常简单的。我更习惯于PHP,这是我第一次尝试使用Python创建这种类型的网页。

想法?

回答

0

为什么使用unicode字符串?你的同事没有。在字符串中尝试不带“u”前缀。

+0

我认识到这可能是一个问题,所以我没有尝试。但是,当试图反映他对“R.write”的使用时,仍然出现属性错误。这一次它说'str'对象必须属性'content_type' – tadamhicks

+0

刚刚回去......通过jove我想我已经得到了...至少让我的查询显示在浏览器中。我错过了连接字符串中的一个。现在我只需要弄清楚如何格式化它。我可以列出它的表格,但结果显示为('AA','text',36,36)等字符串行。我不确定如何拆分元素并在制表中打印它们。 – tadamhicks