🦔

【Python】SQLite3を扱う

に公開

SQLiteとは

  • 軽量なディスク上のデータベースを提供する C ライブラリです。
  • 別のサーバプロセスを用意する必要なく、 SQL クエリー言語の非標準的な一種を使用してデータベースにアクセスできます。
  • 一部のアプリケーションは内部データ保存に SQLite を使えます。
  • 参考:sqlite3 --- SQLite データベース用の DB-API 2.0 インターフェース

リファレンス

モジュール関数

モジュール関数

sqlite3.connect

  • SQLite データベースとの接続(connection)を開きます。
    ( = Connectionオブジェクトを作成します。)
Connectionオブジェクト

Connectionオブジェクト

class sqlite3.Connection

  • 開いた SQLite データベースの各々は、Connection オブジェクトによって表されます。
  • Connection オブジェクトの主な目的:

属性とメソッド

cursor()

  • Cursor オブジェクトを作成して返します。

commit()

  • 保留中のトランザクションをデータベースにコミットします。
  • autocommitが True または開いているトランザクションがない場合、このメソッドは何も行いません。

close()

  • データベース接続を閉じます。
  • autocommit が True または LEGACY_TRANSACTION_CONTROL の場合、暗黙のトランザクション制御は実行されませんので、保留中の変更が失われないように、データベース接続を閉じる前に必ず commit() を行ってください。
Cursor オブジェクト

Cursor オブジェクト

class sqlite3.Cursor

  • SQL 文を実行し、 取得操作(fetch operation)のコンテキストを管理するために使用されるデータベース・カーソル(database cursor)を表します。

属性とメソッド

execute(sql, parameters=(), /)

  • 単一の SQL ステートメントを実行し、オプションでプレースホルダーを使用して Python 値をバインドします。

やってみる

CRUDしてみる

import sqlite3


def fetch_all(cur):
    # R: データ読み取り
    result = cur.execute("""
        SELECT * FROM movie
    """).fetchall()

    return result


def main():
    # DB接続
    db_path = "tutorial.db"
    con = sqlite3.connect(db_path)

    # データベース・カーソルの取得
    cur = con.cursor()

    # movieテーブルの作成
    cur.execute("""
        CREATE TABLE IF NOT EXISTS movie(
            title, year, score
        )
    """)

    # テーブルが作成されたか確認
    res = cur.execute("""
        SELECT name FROM sqlite_master
    """)
    print("1: ", res.fetchall())

    # C: データ挿入
    cur.execute("""
        INSERT INTO movie VALUES
            ('python楽しい', 2000, 8.2),
            ('SQlite楽しい', 2222, 7.5)
    """)
    con.commit()
    print("2: ", fetch_all(cur))

    # U: データ更新
    cur.execute("""
        UPDATE movie
        SET score = 10.0
        WHERE title = 'python楽しい';
    """)
    con.commit()
    print("3: ", fetch_all(cur))

    # D: データ削除
    cur.execute("""
        DELETE FROM movie
        WHERE title = 'python楽しい';
    """)
    con.commit()
    print("4: ", fetch_all(cur))
    
    # DB接続の解除
    con.close()

if __name__ == "__main__":
    main()

実行

python main.py

結果

1:  [('movie',)]
2:  [('python楽しい', 2000, 8.2), ('SQlite楽しい', 2222, 7.5)]
3:  [('python楽しい', 2000, 10.0), ('SQlite楽しい', 2222, 7.5)]
4:  [('SQlite楽しい', 2222, 7.5)]

Discussion