python - 在python中没有得到MSSQL存储过程的结果输出表
问题描述
我的python代码基于:
- 在 Python 中导入 CSV 文件
- 连接到 SQL Server 数据库
- 在 python-insert 语句中查询 1,它从 csv 文件中插入 table1 中的值
- python中的查询2-执行存储过程1,这是一个“选择语句”
- python中的查询3-执行存储过程2,它是'table1的更新语句'
- python中的查询4-执行存储过程3,这是一个'select语句,它在table1上有几个表连接并产生8列的结果'
- 将结果导出到新的 csv 文件
整个 python 代码被成功执行,但生成一个空白的 csv 文件,但没有从查询 4 的游标中获得任何输出。
我的示例代码:
import pyodbc
import pandas as pd
import csv
cnxn_1 = pyodbc.connect()
with open("""csv path""") as csv1:
reader = csv.reader(csv)
cursor_1 = cnxn_1.cursor()
cursor_1.execute("""INSERT INTO TABLE1""")
cursor_1.commit()
cnxn_1.close()
cnxn_2 = pyodbc.connect()
cursor_2 = cnxn_2.cursor()
cursor_2.execute("""exec stored_proc_select_statement @parameter""")
result_1 = cursor_2.fetchall()
print (result_1)
cnxn_2.close()
cnxn_3 = pyodbc.connect()
cursor_3 = cnxn_3.cursor()
cursor_3.execute("""exec stored_proc_update_statement @parameter""")
cursor_3.commit()
cnxn_3.close()
cnxn_4 = pyodbc.connect()
cursor_4 = cnxn_4.cursor()
cursor_4.execute("""exec stored_proc_final_select_statement @parameter""")
cursor_4.commit()
cnxn_4.close()
result_2 = cursor_4.fetchall()
print (result_1)
columns = [column[0] for column in cursor_4.description]
df = pd.DataFrame.from_records(result_2, columns=columns)
print(df)
df.to_csv("""new csv path""")
cnxn_4.close()
解决方案
您过早关闭连接 4:
cnxn_4 = pyodbc.connect()
cursor_4 = cnxn_4.cursor()
cursor_4.execute("""exec stored_proc_final_select_statement @parameter""")
cursor_4.commit()
# **cnxn_4.close()** ## Comment this out, or remove it.
result_2 = cursor_4.fetchall()
print (result_1)
columns = [column[0] for column in cursor_4.description]
df = pd.DataFrame.from_records(result_2, columns=columns)
print(df)
df.to_csv("""new csv path""")
cnxn_4.close()
推荐阅读
- c# - 来自视图模型的 WPF 列表框焦点
- python - 如何替换python列表中存在的字典中的键?
- android - 如何在主类中使用 Companion 对象
- angular - 如何使用 laravel api 以角度上传多个图像/文件?
- php - PHP SQL:在注册中使用前缀自动生成 ID/自动增量
- angular - 如何在另一个 FormGroup 内的 FormGroup 字段中设置验证?
- sorbet - 为元动态创建的方法定义方法类型
- python - 如何组合包含相同键值的dict对象,并输出一个列表?
- c# - c# 控制台应用程序中从 1 到 int.maxValue 的整数的错误消息是什么
- javascript - 我们如何格式化时间线高图的框大小