不明白为什么我的存储过程在pyodbc和SQL Server之间不工作

5 投票
2 回答
7274 浏览
提问于 2025-04-17 15:33

我刚接触Python(2.7),对pyodbc还不太熟悉。我有一个脚本用来调用一个存储过程:

sql = "exec gen_all.dbo.rpt_trinity_total '" + startDate + "', '"  + endDate + "'"

print sql
dbCursor.execute(sql)   
rows = dbCursor.fetchall()

for row in rows:
    print row[0], row[1]

在这个存储过程的最后,我返回了传入的日期,只是为了确认存储过程确实被调用了,并且参数也被正确设置了。看起来一切都应该正常,但当我查看应该被这个存储过程填充的表时,里面什么都没有。如果我在管理控制台中运行这个存储过程,它是可以正常工作的。

我尝试了在这里找到的解决方案,也就是:

dbCursor.execute("{call gen_all.dbo.rpt_trinity_total(?,?)}", (startDate),(endDate))

但结果还是一样,什么都没有。这个存储过程本身非常简单,主要是进行一个清空(TRUNCATE)和插入(INSERT),使用传入的日期进行选择(SELECT)。

我只是想知道有没有人能给点建议。非常感谢。

2 个回答

0

在执行完之后,记得加上

        cursors = sql_con.cursor()
        qry = "exec SP_NAME @Parm1 = ?, @Parm2 = ?"""
        params = (val1, val2)
        cursors.execute(qry, params)
        cursors.commit()
        cursors.close()
17

我觉得问题可能是你没有在连接时进行提交。pyodbc 默认情况下是关闭自动提交的,这样做是为了符合 Python 数据库 API 的规定。你可以试着把 conn.autoCommit = True 设置为真,或者在你的连接上调用 conn.commit() 来手动提交。

撰写回答