python将rs转换成可迭代的对象


#data row
class Row(pb.Copyable):
	def __init__(self,entries): 
		self.__dict__.update(entries)
#tran objects
########################################################################
class ResultObj(pb.Copyable):
	#字符串太长pb无法 传输,转成列表,原理跟FilePager一样
	def __init__(self,rs,PageNo=1,pageSize=300,filedDict=None):
		self.pageSize=pageSize	
		if rs.RecordCount:
			rs.AbsolutePage=PageNo
		self.pageNo=PageNo 
		rs.PageSize=self.pageSize
		self.pageCount=rs.PageCount
		if rs.RecordCount:
			self.rs=rs.GetRows(self.pageSize)
		self.field_num=rs.Fields.Count
		self.next=None
		self.count=self.pageSize

		if self.pageNo<self.pageCount:
			self.next=ResultObj(rs,PageNo+1,self.pageSize,filedDict)
		else:
			self.count=rs.RecordCount-(self.pageNo-1)*self.pageSize
		#查询结果的每一列 生成字典
		if filedDict is None:
			self.filedDict={}
			for n in xrange(self.field_num):
				self.filedDict[n]=rs.Fields.Item(n).Name.lower()
				#没有列明转成 c0 c1.....
				if not self.filedDict[n]:
					self.filedDict[n]='c'+str(n)
		else:
			self.filedDict=filedDict

	def __len__(self):
		return self.count

	def __getitem__(self,key):       	
		row={}
		for cur_col in xrange(self.field_num):
			row[self.filedDict[cur_col]]=self.rs[cur_col][key]
		return Row(row)					
		
	def __iter__(self):
		return iter(self.__next__())
	
	#遍历列表
	def __next__(self):
		fiedlcount=xrange(self.field_num)
		while self:
			for cur_row in xrange(self.count):
				row={}
				for cur_col in fiedlcount:
					row[self.filedDict[cur_col]]=self.rs[cur_col][cur_row]
				yield Row(row)					
			self=self.next
########################################################################
class ResultDict(ResultObj,pb.Copyable):
	def __init__(self,rs,PageNo=1,pageSize=300,filedDict=None):
		ResultObj.__init__(self,rs,PageNo=1,pageSize=300,filedDict=None)	
	def __getitem__(self,key):       	
		row={}
		for cur_col in xrange(self.field_num):
			row[self.filedDict[cur_col]]=self.rs[cur_col][key]
		return row		
	#遍历列表
	def __next__(self):
		fiedlcount=xrange(self.field_num)
		while self:
			for cur_row in xrange(self.count):
				row={}
				for cur_col in fiedlcount:
					row[self.filedDict[cur_col]]=self.rs[cur_col][cur_row]
				yield row					
			self=self.next
########################################################################
class ResultArray(ResultObj,pb.Copyable):
	def __init__(self,rs,PageNo=1,pageSize=300,filedDict=None):
		ResultObj.__init__(self,rs,PageNo=1,pageSize=300,filedDict=None)
	
	def __getitem__(self,key):       	
		row=[]
		for cur_col in xrange(self.field_num):
			row.append(self.rs[cur_col][key])
		return row		
	
	#遍历列表
	def __next__(self):
		fiedlcount=xrange(self.field_num)
		while self:
			for cur_row in xrange(self.count):
				row=[]
				for cur_col in fiedlcount:
					row.append(self.rs[cur_col][cur_row])
				yield tuple(row)					
			self=self.next

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值