2013-11-25 48 views
14

私はMS SQL express dbを使用しています。私は接続してデータを取得できます。ただし、データの挿入は機能しません。pyodbcをSQLに挿入

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

エラーは発生しますが、テーブルに何も挿入されません。 データをフェッチした直後に、挿入された行がフェッチされます。しかし、何も救われません。

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

答えて

33

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

MS SQL Server Management Studioのデフォルトでは、自動コミットが許可されます。これは、各SQLコマンドがすぐに機能し、ロールバックできないことを意味します。

pyodbc Getting Started documentの挿入例

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する言うよう

()です。 あなたはコミットをしなければなりません。そうしないと、変更が失われます。接続が閉じられると、保留中の変更はすべてロールバックされます。これにより、エラーリカバリが非常に簡単になりますが、コミットを呼び出す必要があります。