我对 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。
只是想知道是否有人可以对此提供一些见解。 非常感谢。
我怀疑问题是您没有提交连接。
pyodbc
默认禁用自动提交以满足 Python DB API 规范。尝试设置 conn.autoCommit = True
或在您的连接上拨打 conn.commit()
。
在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()
#对于使用 python 的 SQLAlchemy,这是在与引擎设置连接字符串后需要的行
conn=engine.connect()
conn.execution_options(isolation_level =“AUTOCOMMIT”)