Python 使用PYMSSQL连接MSSQL,只返回游标的第一行,怎么能返回游标的所有行

从不干坏事 2016-06-24 09:16:57
我在MSSQL中写了个过程,可以正常地通过MSSQL调用,并返回游标所有行(共16行)。但我通过PYMSSQL调用该过程只返回了游标的第一行,代码如下:


import pymssql



class CONN_MSSQL:
def __init__(self,host,user,password,db):
self.host=host
self.user=user
self.password=password
self.db=db
def connect_mssql(self):
self.conn=pymssql.connect(host=self.host,user=self.user,password=self.password,database=self.db)
cur=self.conn.cursor()
return cur
def exec_mssql(self,sql):
cur=self.connect_mssql()
cur.execute(sql)
reline=cur.fetchall()
self.conn.close()

return reline


def main():
conn=CONN_MSSQL(host='localhost\MSSQLSERVER1',user='sa',password='abcd.1234',db='KPItest')
ab=conn.exec_mssql('''declare @msg bit,
@CURSOR_R CURSOR,
@ID varchar(155),
@FID varchar(155),
@FuserID varchar(155),
@FProjectID varchar(155),
@KPI_01 varchar(155),
@Score_01 varchar(155),
@KPI_02 varchar(155),
@Score_02 varchar(155),
@KPI_03 varchar(155),
@Score_03 varchar(155),
@KPI_04 varchar(155),
@Score_04 varchar(155),
@KPI_05 varchar(155),
@Score_05 varchar(155),
@KPI_06 varchar(155),
@Score_06 varchar(155),
@KPI_07 varchar(155),
@Score_07 varchar(155),
@KPI_08 varchar(155),
@Score_08 varchar(155),
@KPI_09 varchar(155),
@Score_09 varchar(155),
@KPI_10 varchar(155),
@Score_10 varchar(155),
@KPI_11 varchar(155),
@Score_11 varchar(155),
@KPI_12 varchar(155),
@Score_12 varchar(155);exec KPI_Total_PROC_TEST null,null,null,null,null,@msg output,@CURSOR_R output;
fetch next from CURSOR_To into @ID,@Fid,@FuserID,@FProjectID,@KPI_01,@Score_01,@KPI_02,@Score_02,
@KPI_03,@Score_03,@KPI_04,@Score_04,@KPI_05,@Score_05,@KPI_06,@Score_06,@KPI_07,@Score_07,@KPI_08,@Score_08,
@KPI_09,@Score_09,@KPI_10,@Score_10,@KPI_11,@Score_11,@KPI_12,@Score_12
while @@FETCH_STATUS=0
begin
select @ID,@Fid,@FuserID,@FProjectID,@KPI_01,@Score_01,@KPI_02,@Score_02,
@KPI_03,@Score_03,@KPI_04,@Score_04,@KPI_05,@Score_05,@KPI_06,@Score_06,@KPI_07,@Score_07,@KPI_08,@Score_08,
@KPI_09,@Score_09,@KPI_10,@Score_10,@KPI_11,@Score_11,@KPI_12,@Score_12
fetch next from CURSOR_To into @ID,@Fid,@FuserID,@FProjectID,@KPI_01,@Score_01,@KPI_02,@Score_02,
@KPI_03,@Score_03,@KPI_04,@Score_04,@KPI_05,@Score_05,@KPI_06,@Score_06,@KPI_07,@Score_07,@KPI_08,@Score_08,
@KPI_09,@Score_09,@KPI_10,@Score_10,@KPI_11,@Score_11,@KPI_12,@Score_12
end
close CURSOR_To
deallocate CURSOR_To''')
for i in ab:
print(i)

if __name__ == '__main__':
main()
...全文
250 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanxiaochengyu 2016-06-24
  • 打赏
  • 举报
回复
你这个SQL语句里面搞个游标干啥呢,返回的永远是最后一条数据。因为后一个赋值语句会覆盖前一次赋值。 KPI_Total_PROC_TEST 存储过程是你写的,返回一个msg和一个CURSOR? 这个存储过程可以不用返回CURSOR的,直接最后在存储过程里面select * from table 就可以了 再调用存储过程 sql = "Exec KPI_Total_PROC_TEST" cur.execute(sql)

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧