不知道为什么我的存储过程在 pyodbc 和 SQL Server 之间无法工作

问题描述 投票:0回答:3

我对 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]

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

我尝试了here找到的解决方案,即:

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

但给了我同样的结果,什么也没有。 SP 本身非常简单,根据传递的日期使用 SELECT 进行 TRUNCATE 和 INSERT。

只是想知道是否有人可以对此提供一些见解。 非常感谢。

python sql-server-2008 pyodbc
3个回答
17
投票

我怀疑问题是您没有提交连接。

pyodbc
默认禁用自动提交以满足 Python DB API 规范。尝试设置
conn.autoCommit = True
或在您的连接上拨打
conn.commit()


0
投票

在cursors.execute(qry, params)之后添加cursors.commit()

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

0
投票

#对于使用 python 的 SQLAlchemy,这是在与引擎设置连接字符串后需要的行

conn=engine.connect()

conn.execution_options(isolation_level =“AUTOCOMMIT”)

© www.soinside.com 2019 - 2024. All rights reserved.