2015-06-20 85 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