sqlite3#
PythonでSQLiteを使用するには、まずsqlite3ライブラリをインポートする必要があります。以下は、PythonでSQLiteを使用する基本的な手順です。
-
SQLiteデータベースに接続する
-
テーブルを作成する
-
データを挿入する
-
データを取得する
-
データベースを閉じる
検索#
データベースからデータを検索するには、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ファイルのデータをデータベースに追加する方法の例です。
上記の例では、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を使用して、リレーショナルデータベースを作成する例を示しています。以下、コードの詳細な解説を行います。
- SQLite3モジュールをインポートし、データベースに接続します。 最初に、Pythonのsqlite3モジュールをインポートします。その後、sqlite3.connect()を使用して、example.dbという名前のSQLiteデータベースに接続します。 もし、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))''')
上記のコードでは、conn.cursor()を使用して、カーソルを取得し、SQLiteデータベースに対してクエリを実行するためのカーソルオブジェクトを作成します。 その後、c.execute()メソッドを使用して、2つのテーブルauthorsとbooksを作成しています。
authorsテーブルには、id、name、およびcountryの3つのカラムがあります。idは主キーであり、自動的にインクリメントされます。 booksテーブルには、id、title、author_idの3つのカラムがあります。author_idカラムは、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)")
記のコードでは、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に関連しています。
- データベースの変更を確定し、接続を閉じます。
最後に、conn.commit()を呼び出して、データベースの変更を確定し、conn.close()を呼び出して、SQLiteデータベースに対する接続を閉じます。
これで、PythonとSQLiteを使用して、リレーショナルデータベースを作成する基本的な方法を理解することができました。