web-dev-qa-db-ja.com

pyodbcのsqlへの挿入

MS SQL Express DBを使用します。接続してデータを取得できます。ただし、データの挿入は機能しません。

cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')")

エラーは表示されませんが、テーブルには何も挿入されません。データを取得した直後に、挿入された行が取得されます。しかし、何も保存されません。

MS SQL Server Management Studioでは、挿入は機能します。

29
daniel

データをコミットする必要があります。各SQLコマンドはトランザクション内にあり、トランザクションをコミットして、トランザクションをSQL Serverに書き込み、他のSQLコマンドで読み取れるようにする必要があります。

MS SQL Server Management Studioのデフォルトでは、自動コミットが許可されています。つまり、各SQLコマンドはすぐに機能し、ロールバックできません。

pyodbc入門ドキュメント の挿入例は

cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')")
cnxn.commit()

またはパラメータを使用してより良い

cursor.execute("insert into products(id, name) values (?, ?)", 'pyodbc', 'awesome library')
cnxn.commit()

ドキュメントが言うように

Cnxn.commit()の呼び出しに注意してください。 コミットを呼び出す必要があります。そうしないと、変更が失われます!接続が閉じられると、保留中の変更はすべてロールバックされます。これにより、エラー回復が非常に簡単になりますが、commitを呼び出すことを忘れないでください。

59
Mark