pyodbcを使用してsqlserverのspを実行したいと思っています。
spは単純なinsert処理です。
pythonの実行処理で記載している1つ目がspの呼出し、2つ目がinsert文になります。
2つ目は実行時にエラーが発生した場合、pythonでエラーが確認出来ますが、
1つ目は正常終了してしまい、pythonでエラーが確認できません。
1つ目も同様に確認するためにはどのようにすればよいのでしょうか。
python3.9
pyodbc 4.0.32
python関数
1def exec(self,sql,params=None): 2 conn = self.__connect() 3 cur = conn.cursor() 4 try: 5 if params == None: 6 cur.execute(sql) 7 else: 8 cur.execute(sql,params) 9 conn.commit() 10 except pyodbc.Error as e: 11 conn.rollback() 12 print(e) 13 cur.close() 14 conn.close()
python実行
1data = db.exec('EXEC sp_insert_t_id ?,?,?',params=[5,'namae','bikou']) 2print(data) 3 4data = db.exec("INSERT INTO t_id VALUES (5,'namae','bikou',getdate(),getdate())") 5print(data)
sql
1USE [python_sql_test] 2GO 3SET ANSI_NULLS OFF 4GO 5SET QUOTED_IDENTIFIER OFF 6GO 7 8IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name ='sp_insert_t_id') 9DROP PROCEDURE sp_insert_t_id 10GO 11 12CREATE PROCEDURE [dbo].[sp_insert_t_id] 13 @id INT, 14 @name NVARCHAR(50), 15 @remarks NVARCHAR(50) 16AS 17BEGIN 18 SET NOCOUNT OFF 19 BEGIN TRY 20 BEGIN TRANSACTION 21 INSERT INTO t_id 22 VALUES 23 (@id 24 ,@name 25 ,@remarks 26 ,getdate() 27 ,getdate() 28 ) 29 COMMIT TRANSACTION 30 END TRY 31 BEGIN CATCH 32 ROLLBACK TRANSACTION 33 DECLARE @Message varchar(MAX) = ERROR_MESSAGE(), 34 @Severity int = ERROR_SEVERITY(), 35 @State smallint = ERROR_STATE(); 36 37 RAISERROR (@Message, @Severity, @State) 38 END CATCH 39END 40GO

回答1件
あなたの回答
tips
プレビュー