[Python] SQLiteを使用する

投稿者: | 2022-09-11

Python3の標準ライブラリにSQLite3が入っているためインストールの必要はありません。

import sqlite3

def main():
    # データベースに接続
    # 存在しない場合はデータベースを作成
    conn = sqlite3.connect('test.db')

    # カラム名でデータを取得する場合は必要
    conn.row_factory = sqlite3.Row

    # sqliteを操作するカーソルオブジェクトを作成
    cur = conn.cursor()

    # テーブルを削除
    # 存在する場合のみ削除
    cur.execute('drop table if exists persons')

    # テーブルを作成
    # 存在しない場合のみ作成
    cur.execute('create table if not exists persons (id integer primary key, name string)')

    # データを追加
    cur.execute('insert into persons(id, name) values(1, "ichiro")')
    # 複数行のデータを追加
    cur.execute('insert into persons(id, name) values(2, "jiro"), (3, "saburo")')

    # データを取得
    rows = cur.execute('select * from persons order by id')
    for row in rows:
        text = "id={0} name={1}"
        print(text.format(row['id'], row['name']))

    # カーソルオブジェクトを閉じる
    cur.close()

    # コミット
    conn.commit()

    # 接続を閉じる
    conn.close()

if __name__ == "__main__":
    main()

コミットしないとデータベースに保存されないので注意が必要です。

SQL実行後に自動でコミットしたいときはデータベースに接続する際に設定することができます。

    conn = sqlite3.connect('test.db', isolation_level = None)

繰り返してデータ追加する場合などは、毎回コミットするより最後にコミットしたほうが処理がはやくなるので、自動ではなく手動でコミットしたほうがよいです。

複数行のデータを挿入する場合、executemanyを使用することもできます。

    # 複数行の挿入データ
    data = [
        (4, "shiro"),
        (5, "goro"),
        (6, "rokuro")
        ]

    # 複数行のデータを追加
    cur.executemany('insert into persons(id, name) values(?, ?)', data)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です