【python】 python 连接oracle数据库 cx_Oracle插件

我这里是根据前两天日志顺序来的,不懂的前翻。


下载 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')

输出结果:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值