【发布时间】:2015-06-20 22:47:28
【问题描述】:
我编写了一些 python 来查询 Oracle 数据库,我希望它在我用浏览器查看它时将结果打印在格式化的 HTML 表中。我不确定该怎么做。
我写的python如下:
#!/usr/bin/python2.6
import imp,datetime
import cx_Oracle
def index():
conn_str = u'$USERNAME/$PASSWORD@$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 创建这种网页。
想法?
【问题讨论】: