2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SuiSuiAdvent Calendar 2023

Day 20

【SQLite3】データの登録・取得・更新・削除

Last updated at Posted at 2023-12-19

はじめに

Pythonの標準ライブラリである"sqlite3"の備忘録.

動作環境

  • Python 3.12.0
  • SQLite3モジュール 2.6.0
  • SQLite 3.42.0

コマンド

データベース作成

import sqlite3

dbFile = 'test.db'
con = sqlite3.connect(dbFile)

con.close()

カレントディレクトリに"test.db"が無ければ作成します.すでに"test.db"が作成されていれば,"test.db"に接続します.

テーブル作成

テーブル作成は以下の手順で行います.

1. データベースに接続
2. カーソルオブジェクトを作成
3. テーブルを作成するCREATE文を実行
4. データベースに情報をコミット
5. データベースの接続を切断

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# 3.CREATE文を実行
cur.execute("""CREATE TABLE persons(id, name,gender)""")

# 4.データベースに情報をコミット
con.commit()

# 5.データベースの接続を切断
cur.close()
con.close()

テーブルを作成する時の基本となる構文は下記の通りです.

CREATE TABLE テーブル名(カラム名1, カラム名2, ...);

dbファイルにテーブルが存在しない場合のみ作成するときは,"IF NOT EXISTS"を追記します.

CREATE TABLE IF NOT EXISTS テーブル名(カラム名1, カラム名2, ...);

テーブルにデータ登録(INSERT文)

テーブルに含まれる全てのカラムに値を指定してデータを追加する場合,以下の構文を使用します.

INSERT INTO テーブル名 VALUES(値1, 値2, ...);

テーブルに含まれる特定のカラムを指定してデータを追加する場合,以下の構文を使用します.

INSERT INTO テーブル名(カラム名) values(値1);

以下,サンプルコードです.

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# 3.テーブルにデータを登録する
# 全てのカラムに値を指定してデータを追加する場合
cur.execute("INSERT INTO persons VALUES('1', 'Sato', 'male');")
# 1つのカラムに値を指定してデータを追加する場合
cur.execute('INSERT INTO persons(name) values("Tanaka")')

# 4.データベースにデータをコミット
con.commit()

# 5.データベースの接続を切断
cur.close()
con.close()

テーブルに含まれる全てのカラムに値を指定して複数のデータを追加する場合,以下のように記述します.

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# テーブルにデータを登録する
data = (
    ['1', 'Sato', 'Male'],
    ['2', 'Tanaka', 'Male'],
    ['3', 'Yamada', 'Female']
    )
sql = "INSERT INTO persons VALUES(?, ?, ?)"
cur.execute(sql, data)

# 4.データベースにデータをコミット
con.commit()

# 5.データベースの接続を切断
cur.close()
con.close()

dataはリスト型かタプル型変数を使用します.
テーブルのカラム数に合わせて括弧内の?の数を変更してください.

テーブルのデータ取得(SELECT文)

データを取得する際の基本となる構文は以下の通りです.

SELECT カラム名1, カラム名2, ... FROM テーブル名;

SELECT の後のカラム名を指定することで,特定のデータのみ取得することができます.全てのデータを取得したいときは,上記のスクリプトのように,カラム名の場所を"*"で記述します.
WHERE句を使うと取得するデータの条件を絞ることができます.紹介は割愛します.以下,サンプルコードです.

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# 3.テーブルの全データを取得
cur.execute('SELECT * FROM persons')

# 取得したデータを出力
for row in cur:
    print(row)

# 4.データベースの接続を切断
cur.close()
con.close()

テーブルデータの更新(UPDATE文)

テーブルに格納されているデータを新しい値に更新する際の基本となる構文は以下の通りです.

UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件式;

WHERE句の条件式を使用して,更新の対象となるデータを指定します.条件式に一致するデータが複数の場合,該当するデータ全てが更新されます.WHERE句を省略すると,指定したテーブル内の全てのデータが更新されます.
SETの後に更新したいカラム名と更新後の値を指定します.以下,サンプルコードです.

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# 3.テーブルにデータを登録する
data = (
    ['1', 'Sato', 'Male'],
    ['2', 'Tanaka', 'Male'],
    ['3', 'Yamada', 'Female']
    )
sql = "INSERT INTO persons VALUES(?, ?, ?)"
cur.execute(sql, data)

# 4.データベースにデータをコミット
con.commit()

# 5.データを更新
cur.execute("UPDATE persons SET name = 'ojisan' WHERE gender = 'Male';")
con.commit()

# 6.データベースの接続を切断
cur.close()
con.close()

これで "gender" 列が "Male" のデータの "name" が "ojisan" になりました.

['1', 'Sato', 'Male'],         ['1', 'ojisan', 'Male'],
['2', 'Tanaka', 'Male'],   →   ['2', 'ojisan', 'Male'],
['3', 'Yamada', 'Female']      ['3', 'Yamada', 'Female']

テーブルデータの削除(DELETE文)

テーブルからデータを削除する際の基本となる構文は以下の通りです.

DELETE FROM テーブル名 WHERE 条件式;

WHERE句の条件式を使用して,削除の対象となるデータを指定します.条件式に一致するデータが複数の場合は,複数のデータがまとめて削除されます.WHERE句を省略すると,指定したテーブル内の全てのデータが削除されます.

import sqlite3

dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)

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

# 3.データを削除する
cur.execute("DELETE FROM persons WHERE name = "ojisan";")

# 4.データベースにデータをコミット
con.commit()

# 5.データベースの接続を切断
cur.close()
con.close()

これで "persons" というテーブルからおじさん("name" が "ojisan" のデータ)が抹消されました.
IMG_0390.png

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?