python - pyodbc doesn't report sql server error -


i have issue pyodbc doesn't capture errors returned stored procedure. actual stored proc lot of stuff purpose of demonstrating error created simple proc , associated python code. relevant code below:

stored procedure:

create procedure [dbo].[testerrors]     -- add parameters stored procedure here  begin     -- set nocount on added prevent result sets     -- interfering select statements.     set nocount on;     -- insert statements procedure here     insert parameter(name, units, datatype) values (null, null, null) end  go 

python code:

import pyodbc connectstring = "driver={sql server};server=%s;database=%s;uid=%s;pwd=%s" % (r'srvr', r'mydb', r'usr', r'pwd') cnxn = pyodbc.connect(connectstring) cnxn.autocommit = true cursor = cnxn.cursor() cursor.execute("exec testerrors") cursor.close() 

error expected:

 cursor.execute("exec testerrors") pyodbc.integrityerror: ('23000', "[23000] [microsoft][odbc sql server driver][sql server]cannot insert value null column 'name', table 'parametrics.dbo.parameter'; column not allow nulls. insert fails. (515) (sqlexecdirectw); [01000] [microsoft][odbc sql server driver][sql server]the statement has been terminated. (3621)") 

however when modified stored procedure include select statement error no longer comes python code. python code exits if no error has occurred.

updated stored procedure:

create procedure [dbo].[testerrors]     -- add parameters stored procedure here  begin     -- set nocount on added prevent result sets     -- interfering select statements.     set nocount on;     select 108     -- insert statements procedure here     insert parameter(name, units, datatype) values (null, null, null) end  go 

it seems pyodbc doesn't see error when there interleaving result records through select statements. issue here , there way overcome issue?

edit: tried pymssql , see same behavior

i able recreate issue python 3.4.3 using pypyodbc, , vbscript using ado. appears once stored procedure has emitted result set odbc notices sp has returned something , subsequent errors in sp don't trigger error in calling procedure.

one possible workaround structure stored procedure doesn't produce result set(s) until end. if t-sql code encounters error before executing select creates result set error gets passed caller. example, tweaked version of stored procedure throw error py[py]odbc can catch:

create procedure [dbo].[table1sp] begin     declare @foo int;     set nocount on;     select @foo = 108;     insert table1 (textcol) values (null);  -- error here     select @foo foo end 

Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -