🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

13961閲覧

Python データベース commit()は何をしているのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/26 03:48

編集2019/11/26 03:58

Python

1 2def get_users(): 3conn = sqlite3.connect("crm.sqlite") 4cursor = conn.cursor() 5 6sql = "SELECT * FROM customers" 7 8results = cursor.execute(sql) 9users = results.fetchall() 10 11conn.commit() 12 13conn.close() 14 15return users 16

Pythonでデータベースを利用する際にわからないことがあります。
2点教えて頂きたいです。

1つ目は、commit()は何故する必要があるのでしょうか?

2つ目は、commit()は何をしているのでしょうか?
Gitのcommitと同じでしょうか?
データベースでcommitがうまく想像できないです。

回答宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/11/26 04:00

じゃーcommitしなかったらどうなるかは試してみました?
退会済みユーザー

退会済みユーザー

2019/11/26 04:16

データの処理が確定しない?で良いのでしょうか? Gitのcommitだとゲームのセーブができ、過去のセーブにアクセスできるようなイメージなのですがデータベースのcommitはセーブのみということでしょうか?
m.ts10806

2019/11/26 04:24

ドキュメントになにも書いてないとは思えませんけど…
退会済みユーザー

退会済みユーザー

2019/11/26 04:43

「sqlite3 doc commit」で検索してみました。 上の方はPythonのドキュメントですね。 sqliteのページもありました。 でもドキュメントの読み方がよくわからないです。
m.ts10806

2019/11/26 04:50

では、そのように書かれた方が良いです。 プログラミングをしていくにおいて、ドキュメントの使い方がわかってないのは結構致命的です。 逆にそれが分かるだけで質問文を考える手間が省けると考えたら、どうでしょう?
退会済みユーザー

退会済みユーザー

2019/11/26 05:03

今度、ドキュメントの読み方を質問したいと思います。 ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

データベースにおける commit は、「変更を確定する」という意味を持ちます。
※git も同様

例えば銀行口座同士の送金を考えた場合、

  1. 送り元口座から送金額+手数料を減らす
  2. 送り先口座に送金額を加算してもらう

という二つの処理を順番に、確実に行わねばなりません。1. だけやって 2. をやってなかったら大変ですし、1. は成功しても 2. が失敗(口座番号間違ってるとか)したら、1. をやっていないことに戻さねばなりません。
こういった一連の分割できない処理を、ひとまとめにして一括で確定/破棄できる仕組みをデータベースではトランザクションと言います。commit は「トランザクションの結果を確定する」ものです。破棄する場合は rollback といいます。

単なる参照だけの場合はトランザクションは通常は不要(※)なので commit も不要なのですが、慣例的に一連の処理が終わったことを示すために commit を行うことはあるのです。(データベースの設定によっては、SELECTした時点で暗黙にトランザクションが開始する場合もあります)
※参照から始まる一連の処理中に「他からそのレコードを弄らせない」という排他処理を行うためにトランザクションを行う場合があります

投稿2019/11/26 04:12

編集2019/11/26 04:25
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/26 04:32

COMMITは「変更を確定」することなんですね。 詳しい回答ありがとうございました。何となくですがイメージが付きました。トランザクションがよくわからなかったので調べてみたいと思います。 ありがとうございました。
guest

0

COMMITはDELETE, INSERT, UPDATEした内容を保存(確定)します。COMMIT する前ならROLLBACK することでDELETE, INSERT, UPDATEした内容を取り消せます。

Aさんの口座からBさんの口座へ1万円振替える時は、

  1. Aさんの口座の残高から1万円マイナスするUPDATEを実行し、
  2. Bさんの口座の残高に1万円プラスするUPDATEを実行して、
  3. COMMIT します。

--

  1. は正常に実行できたが、
  2. で何らかのエラーが発生した場合は ROLLBACK して 1. からやり直すということをやっています。

質問のコードはCONNECT, SELECT しているだけですからCOMMIT は不要です。

投稿2019/11/26 04:18

編集2019/11/26 04:19
Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/26 04:29

COMMITが不要な場合もあるんですね。 呪文のように覚えてようとしていたので必ず書かないといけないのかと思っていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問