提问人:Reza Akraminejad 提问时间:12/27/2017 最后编辑:aynberReza Akraminejad 更新时间:3/23/2023 访问量:664
从 pymssql 中的存储过程返回第一个表后无法获取列名
Can't get column names after first table return from Stored procedure in pymssql
问:
我在 sql server 中有一个返回多个表的过程:
create procedure newtest
as
begin
select 1 as a
select 2 as b
end
在 python 中,cursor.description 只返回第一列名称:a
我想获取每个表中的每个列名。
我该怎么做?
这是我的代码:
cur.execute(com)
num_tables=0
while True:
print(cur.description)
ret=cur.fetchall()
if len(ret)>0:
ret_list.append(ret)
num_tables+=1
print(ret)
else:
break
答:
3赞
bwt
1/11/2018
#1
如果该命令返回多个表(即多个结果集)。您可以使用 Cursor.nextset() 从一个集合切换到下一个集合。
像这样:
num_tables = 0
while True:
print(cur.description)
# all lines of the current set
ret = cur.fetchall()
if len(ret) > 0:
ret_list.append(ret)
num_tables += 1
print(ret)
# check and fetch the next set
if not cur.nextset():
break
不会强制结果集具有相同的列计数。例如:
create procedure newtest
as
begin
select 1 as a
select 2 as b, 3 as c
end
其结果是:
(('a', <class 'int'>, None, 10, 10, 0, False),)
[(1, )]
(('b', <class 'int'>, None, 10, 10, 0, False), ('c', <class 'int'>, None, 10, 10, 0, False))
[(2, 3)]
评论
0赞
Reza Akraminejad
1/14/2018
我对每个表返回都使用了 cur.connection._conn.get_header(),它起作用了
0赞
bwt
1/15/2018
如果可能的话,我建议使用标准 (PEP 249) 函数,而不是特定于驱动程序或未记录的函数
评论