Skip to content

sqlite3#

PythonでSQLiteを使用するには、まずsqlite3ライブラリをインポートする必要があります。以下は、PythonでSQLiteを使用する基本的な手順です。

  1. SQLiteデータベースに接続する

    import sqlite3
    
    # データベースに接続
    conn = sqlite3.connect('example.db')
    

  2. テーブルを作成する

    # カーソルオブジェクトを取得
    cur = conn.cursor()
    
    # テーブルを作成するSQL文を作成
    create_table = '''CREATE TABLE IF NOT EXISTS users
                      (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)'''
    
    # SQL文を実行
    cur.execute(create_table)
    
    # 変更を保存
    conn.commit()
    

  3. データを挿入する

    # データを挿入するSQL文を作成
    insert_data = "INSERT INTO users(id, name, age) VALUES (?, ?, ?)"
    
    # パラメータを指定してSQL文を実行
    cur.execute(insert_data, (1, 'John', 30))
    
    # 変更を保存
    conn.commit()
    

  4. データを取得する

    # データを取得するSQL文を作成
    select_data = "SELECT * FROM users"
    
    # SQL文を実行
    cur.execute(select_data)
    
    # 取得したデータを表示
    for row in cur.fetchall():
        print(row)
    

  5. データベースを閉じる

    # カーソルを閉じる
    cur.close()
    
    # データベースを閉じる
    conn.close()
    

検索#

データベースからデータを検索するには、SQLのSELECT文を使用します。以下は、PythonでSQLiteを使用してデータベースからデータを検索する方法の例です。

import sqlite3

# データベースに接続
conn = sqlite3.connect('example.db')

# カーソルオブジェクトを取得
cur = conn.cursor()

# SELECT文を作成する
select_data = "SELECT * FROM users WHERE age >= ?"

# パラメータを指定してSQL文を実行
cur.execute(select_data, (20,))

# 取得したデータを表示
for row in cur.fetchall():
    print(row)

# カーソルを閉じる
cur.close()

# データベースを閉じる
conn.close()

上記の例では、年齢が20歳以上のユーザーを検索しています。SQLのWHERE句を使用して、検索条件を指定し、パラメータを指定してSQL文を実行します。 SQL文の結果は、fetchall()メソッドを使用して取得し、ループを使用してデータを表示します。

追加#

データベースにデータを追加するには、SQLのINSERT文を使用します。以下は、PythonでSQLiteを使用してデータベースにデータを追加する方法の例です。

import sqlite3


conn = sqlite3.connect('example.db')
cur = conn.cursor()

# INSERT文を作成する
insert_data = "INSERT INTO users (name, age) VALUES (?, ?)"

# パラメータを指定してSQL文を実行
cur.execute(insert_data, ('John', 30))

# 変更を保存
conn.commit()
cur.close()
conn.close()

上記の例では、名前がJohnで年齢が30歳のユーザーをデータベースに追加しています。 SQLのINSERT文を使用して、データを追加し、パラメータを指定してSQL文を実行します。変更を保存するために、commit()メソッドを使用します。

削除#

データベースからデータを削除するには、SQLのDELETE文を使用します。以下は、PythonでSQLiteを使用してデータベースからデータを削除する方法の例です。

import sqlite3


conn = sqlite3.connect('example.db')
cur = conn.cursor()

# DELETE文を作成する
delete_data = "DELETE FROM users WHERE age < ?"

# パラメータを指定してSQL文を実行
cur.execute(delete_data, (20,))

# 変更を保存
conn.commit()
conn.commit()
cur.close()
conn.close()

CSV ファイルを追加#

CSVファイルのデータをデータベースに追加するには、Pythonの標準ライブラリのcsvモジュールを使用してCSVファイルを読み込み、 SQLiteを使用してデータベースにデータを追加します。以下は、PythonでCSVファイルのデータをデータベースに追加する方法の例です。

import csv

# CSVファイルを読み込む
with open('example.csv', 'r') as f:
    reader = csv.reader(f)
    data = list(reader)

上記の例では、example.csvという名前のCSVファイルを読み込んでいます。csvモジュールのreader()関数を使用してCSVファイルを読み込み、 list()関数を使用してリストに変換しています。data変数には、CSVファイルの内容がリスト形式で格納されます。

import sqlite3


conn = sqlite3.connect('example.db')
cur = conn.cursor()

# データを追加するSQL文を作成する
insert_data = "INSERT INTO users (name, age) VALUES (?, ?)"

# CSVファイルから取得したデータをデータベースに追加する
for row in data:
    cur.execute(insert_data, row)

# 変更を保存
conn.commit()
cur.close()
conn.close()

上記の例では、CSVファイルから取得したデータをデータベースに追加しています。 SQLのINSERT文を使用して、データを追加し、パラメータを指定してSQL文を実行します。 forループを使用して、CSVファイルから取得したデータを順次処理しています。

JSON ファイルを追加#

JSONファイルのデータをデータベースに追加するには、Pythonの標準ライブラリのjsonモジュールを使用してJSONファイルを読み込み、SQLiteを使用してデータベースにデータを追加します。 以下は、PythonでJSONファイルのデータをデータベースに追加する方法の例です。

import json

# JSONファイルを読み込む
with open('example.json', 'r') as f:
    data = json.load(f)

上記の例では、example.jsonという名前のJSONファイルを読み込んでいます。jsonモジュールのload()関数を使用してJSONファイルを読み込み、data変数に格納しています。

import sqlite3


conn = sqlite3.connect('example.db')
cur = conn.cursor()

# データを追加するSQL文を作成する
insert_data = "INSERT INTO users (name, age) VALUES (?, ?)"

# JSONファイルから取得したデータをデータベースに追加する
for row in data:
    name = row['name']
    age = row['age']
    cur.execute(insert_data, (name, age))

# 変更を保存
conn.commit()
cur.close()
conn.close()

上記の例では、JSONファイルから取得したデータをデータベースに追加しています。 SQLのINSERT文を使用して、データを追加し、パラメータを指定してSQL文を実行します。forループを使用して、JSONファイルから取得したデータを順次処理しています。

条件に応じてデータを追加#

データベースに値が存在した場合には、新しいデータを追加する代わりに、既存のデータを更新することが一般的です。 以下は、PythonでSQLiteを使用して、データベースに値が存在したらデータを更新し、存在しない場合にはデータを追加する方法の例です。

import sqlite3

# データベースに接続
conn = sqlite3.connect('example.db')

# カーソルオブジェクトを取得
cur = conn.cursor()

# データベースにデータを追加または更新する
def add_data(name, age):
    # データベースに値が存在するかチェックする
    cur.execute("SELECT * FROM users WHERE name=?", (name,))
    row = cur.fetchone()

    if row is None:
        # データが存在しない場合は追加する
        cur.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
        print("新しいデータを追加しました。")
    else:
        # データが存在する場合は更新する
        cur.execute("UPDATE users SET age=? WHERE name=?", (age, name))
        print("既存のデータを更新しました。")

    # 変更を保存
    conn.commit()

# データベースにデータを追加または更新する
add_data("John", 25) # 新しいデータを追加しました。
add_data("Mary", 30) # 新しいデータを追加しました。
add_data("John", 35) # 既存のデータを更新しました。

# カーソルを閉じる
cur.close()

# データベースを閉じる
conn.close()

上記の例では、add_data()関数を定義して、データベースにデータを追加または更新する方法を実装しています。 まず、SELECT文を使用して、データベースに値が存在するかどうかをチェックし、fetchone()メソッドを使用して結果を取得しています。 次に、結果がNoneである場合は、INSERT文を使用して新しいデータを追加し、そうでない場合は、UPDATE文を使用して既存のデータを更新します。 最後に、変更を保存するためにcommit()メソッドを呼び出しています。

リストをデータベースに追加#

リスト内の各データをタプルに変換し、INSERT文を使用してテーブルに追加します。

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS my_table
             (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

my_list = [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
for item in my_list:
    c.execute("INSERT INTO my_table (name, age) VALUES (?, ?)", item)

conn.commit()
conn.close()

辞書をデータベースに追加#

辞書のキーと値を使用して、INSERT文を作成し、テーブルに追加します。

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS my_table
             (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

my_dict = {'name': 'Alice', 'age': 25}
keys = ','.join(my_dict.keys())
question_marks = ','.join(['?'] * len(my_dict))
values = tuple(my_dict.values())
c.execute(f"INSERT INTO my_table ({keys}) VALUES ({question_marks})", values)

conn.commit()
conn.close()

リレーショナルデータベースの作成#

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

# authorsテーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS authors
             (id INTEGER PRIMARY KEY, name TEXT, country TEXT)''')

# booksテーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS books
             (id INTEGER PRIMARY KEY, title TEXT, author_id INTEGER,
              FOREIGN KEY(author_id) REFERENCES authors(id))''')

# authorsテーブルにデータを追加
c.execute("INSERT INTO authors (name, country) VALUES ('J.K. Rowling', 'UK')")
c.execute("INSERT INTO authors (name, country) VALUES ('Stephen King', 'USA')")

# booksテーブルにデータを追加
c.execute("INSERT INTO books (title, author_id) VALUES ('Harry Potter and the Philosopher''s Stone', 1)")
c.execute("INSERT INTO books (title, author_id) VALUES ('The Shining', 2)")

conn.commit()
conn.close()

解説#

上記のコードは、PythonとSQLiteを使用して、リレーショナルデータベースを作成する例を示しています。以下、コードの詳細な解説を行います。

  1. SQLite3モジュールをインポートし、データベースに接続します。 最初に、Pythonのsqlite3モジュールをインポートします。その後、sqlite3.connect()を使用して、example.dbという名前のSQLiteデータベースに接続します。 もし、example.dbが存在しなければ、このコードは新しいデータベースを作成します。
import sqlite3
conn = sqlite3.connect('example.db')
  1. データベースにテーブルを作成します。テーブル名とカラム名は、プロジェクトの要件に合わせて選択してください。
c = conn.cursor()

# authorsテーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS authors
             (id INTEGER PRIMARY KEY, name TEXT, country TEXT)''')

# booksテーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS books
             (id INTEGER PRIMARY KEY, title TEXT, author_id INTEGER,
              FOREIGN KEY(author_id) REFERENCES authors(id))''')

上記のコードでは、conn.cursor()を使用して、カーソルを取得し、SQLiteデータベースに対してクエリを実行するためのカーソルオブジェクトを作成します。 その後、c.execute()メソッドを使用して、2つのテーブルauthorsとbooksを作成しています。

authorsテーブルには、id、name、およびcountryの3つのカラムがあります。idは主キーであり、自動的にインクリメントされます。 booksテーブルには、id、title、author_idの3つのカラムがあります。author_idカラムは、authorsテーブルのidカラムを参照する外部キー制約が設定されています。

  1. データをテーブルに追加します。
# authorsテーブルにデータを追加
c.execute("INSERT INTO authors (name, country) VALUES ('J.K. Rowling', 'UK')")
c.execute("INSERT INTO authors (name, country) VALUES ('Stephen King', 'USA')")

# booksテーブルにデータを追加
c.execute("INSERT INTO books (title, author_id) VALUES ('Harry Potter and the Philosopher''s Stone', 1)")
c.execute("INSERT INTO books (title, author_id) VALUES ('The Shining', 2)")

記のコードでは、c.execute()メソッドを使用して、2つのテーブルにデータを追加しています。authorsテーブルには、J.K. RowlingとStephen Kingという2人の著者の情報を追加しています。 booksテーブルには、それぞれの著者に関連する本の情報を追加しています。Harry Potter and the Philosopher's StoneはJ.K. Rowlingに、The ShiningはStephen Kingに関連しています。

  1. データベースの変更を確定し、接続を閉じます。
conn.commit()
conn.close()

最後に、conn.commit()を呼び出して、データベースの変更を確定し、conn.close()を呼び出して、SQLiteデータベースに対する接続を閉じます。

これで、PythonとSQLiteを使用して、リレーショナルデータベースを作成する基本的な方法を理解することができました。