我这里是根据前两天日志顺序来的,不懂的前翻。
下载 cx_Oracle-5.1.2-11g.win32-py2.7.msi,MySQL-python-1.2.3.win32-py2.7.msi 并安装(注意:我的电脑win8 64位 但这里仍然需要安装32位的包,否则报错:no module named cx_Oracle . 猜测是因为64系统安装oracle时安装了32位客户端导致) 此处安装MySql包是因为脚本中涉及
因为上篇文章中安装的编辑器是:Ulipad,这个编辑器中文乱码问题比较麻烦。。。简单说下处理方法:
yestday_zh = u'昨天'
yestday_zh1 = '昨天'
print yestday_zh.encode('gb2312')
print yestday_zh1.decode('utf-8').encode('gb2312')
# 判断编码方式
def str_isunicode(str):
if isinstance(str, unicode):
#str = u'中文'
return str.encode('gb2312')
else:
#str = '中文'
return str.decode('utf-8').encode('gb2312')
print str_isunicode('中国')
print str_isunicode(u'中国')
<strong>
</strong>
<strong>连接oracle数据库并返回数据行</strong>
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cx_Oracle,datetime,MySQLdb
__s_date = datetime.date(1899, 12, 31).toordinal()-1
'''
Excel中的日期为浮点数则转为标准日期格式
'''
def getdate(date):
if isinstance(date, float):
date = int(date)
d = datetime.date.fromordinal(__s_date + date)
return d.strftime("%Y%m%d")
def getYesterday():
'''
昨天
'''
today=datetime.date.today()
oneday=datetime.timedelta(days=1)
yesterday=today-oneday
return yesterday
print '昨天:'.decode('utf-8').encode('gb2312'),getYesterday().strftime("%Y-%m-%d");
'''
获取GIPAP、TIPAP新批再批患者名单
'''
def getGipapTipapNewReactivePass (sql):
try:
db=cx_Oracle.connect("user","password",'127.0.0.1:1521/orcl')
cursor=db.cursor()
SQLTEXT=sql
rslist=[]
rs=cursor.execute(SQLTEXT)
rslist=rs.fetchall()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
cursor.close()
db.close()
return rslist
'''
查询结果集
'''
def writeDateToXls(paptype,papname):
gsql=u"select t.pchinesename,t.pmobile,t.pphone,t.pplanbegindate,d.dname from (select m.mrpatient,m.mrplanbegintime,m.mrplanendtime,m.mrendtime,m.mrbegintime from table m "
if paptype=='New':
mailtype=1
newplan=' '
passtype=u'new'
if papname=='GIPAP':
domain=1
passpap=u'gipap'
else:
domain=2
passpap=u'tipap'
gsql+=u"where m.mrmailtype="+str(mailtype)+ str(newplan) +" and f_domain_by_pid(m.mrpatient)="+str(domain)+" and status='1' and m.mrendtime =(to_char(trunc(sysdate-1),'yyyy-mm-dd'))) a "
gsql+="left join table t on t.pid=a.mrpatient "
gsql+="left join table p on p.pid=t.pplan "
gsql+="left join table e on e.eid=t.pcsa "
gsql+="left join table j on j.jemployee=t.pcsa "
gsql+="left join table d on d.did=j.jdepartment "
gsql+="where d.dstatus='A' and j.jstatus='A' and e.estatus='A' "
print gsql
print papname+'==='+passtype
rslist=[]
rslist=getGipapTipapNewReactivePass(gsql)
print '返回条数:'.decode('utf-8').encode('gb2312'), len(rslist)
#调用查询方法
writeDateToXls('New','GIPAP')
输出结果: