我使用 pyodbc 然后将 pyodbc 行对象转换为列表。大多数答案都显示了一个查询,将变量声明为查询的一部分。但我认为您将变量声明为 sp 的一部分,从而消除了 python 中不必要的步骤。然后,在 python 中,您所要做的就是传递参数来填充这些变量。
这是我用来将 pyodbc 行对象转换为可用列表(列表)的函数(请注意,我注意到 pyodbc 有时会添加尾随空格,所以我解释了对我来说效果很好的那个):
def convert_pyodbc(pyodbc_lst):
'''Converts pyodbc rows into usable list of lists (each sql row is a list),
then examines each list for list elements that are strings,
removes trailing spaces, and returns a usable list.'''
usable_lst = []
for row in pyodbc_lst:
e = [elem for elem in row]
usable_lst.append(e)
for i in range(0,len(usable_lst[0])):
for lst_elem in usable_lst:
if isinstance(lst_elem[i],str):
lst_elem[i] = lst_elem[i].rstrip()
return usable_lst
现在,如果我需要从 python 运行一个返回结果集的存储过程,我只需使用:
strtdate = '2022-02-21'
stpdate = '2022-02-22'
conn = mssql_conn('MYDB')
cursor = conn.cursor()
qry = cursor.execute(f"EXEC mystoredprocedure_using_dates
'{strtdate}','{stpdate}' ")
results = convert_pyodbc(qry.fetchall())
cursor.close()
conn.close()
然后我将样本结果写入电子表格或 w/e:
[[datetime.date(2022, 2, 21), '723521', 'A Team Line 1', 40, 9],
[datetime.date(2022, 2, 21), '723522', 'A Team Line 2', 15, 10],
[datetime.date(2022, 2, 21), '723523', 'A Team Line 3', 1, 5],
[datetime.date(2022, 2, 21), '723686', 'B Team Line 1', 39, 27],
[datetime.date(2022, 2, 21), '723687', 'B Team Line 2', 12, 14]]