この記事ではPythonでSQLiteを使ってデータベースに接続し利用する方法について解説します。
Pythonでは多くの種類のデータベースを利用することができますが今回はその中の一つであるSQLiteをPythonで使っていきます。
目次
Udemyの動画学習でもPythonを勉強しよう!
「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!
UdemyのPythonおすすめ33講座レビューリストSQLiteはSQLの中でも比較的に小規模なデータ向けのデータベースになります。PythonでSQLiteを使うには標準ライブラリのsqlite3をインポートします。
import sqlite3
Pythonでデータベースを作成する方法
データベース内ではフィールド(列)とレコード(行)から構成されるテーブル(表)を用いてデータが保存されています。今回はサンプルのデータベースとして下記のデータベースを作成します。
テーブル名:users
id | name | age |
1 | ヤマダ | 30 |
2 | タナカ | 32 |
3 | ウエダ | 26 |
テーブル名が「users」で「id」「 name」「 age」がそれぞれフィールドになります。それらのフィールドにある各データがレコードです。まずはPythonのsqlite3でデータベースのファイルを作成して上記のようなテーブルのフィールドが格納されてるレコードのデータベースを作成していきます。
import sqlite3
#データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
#テーブルの作成
c.execute('''CREATE TABLE users(id real, name text, age text)''')
#データの挿入
c.execute("INSERT INTO users VALUES (1, 'ヤマダ', '30')")
c.execute("INSERT INTO users VALUES (2, 'タナカ', '32')")
c.execute("INSERT INTO users VALUES (3, 'ウエダ', '26')")
#保存(コミット)する
conn.commit()
#データベースへの接続を終了する
conn.close()
データベースを作成する事ができました。connect( )メソッドを用いてファイル名を指定しています。
そして、execute( )メソッドの引数にSQLコマンドでテーブル名やフィールドを設定してinsert文を使ってレコードを作成しています。最後にconn.close( )でデータベースの接続を終了しています。
データベース内の全てのレコード取得をしていきます。SQL文の構文は下記になります。
SELECT フィールド名 FROM テーブル名
今回は全てのフィールドを取得するのでフィールド名は「*」を指定しています。「*」をSELECTで指定すると全てのデータを取得する事ができます。そして、FROMの後にテーブル名を指定することでテーブル内のデータを呼び出しています。テーブル内の全てのレコードをfetchall( )メソッドを使用してコンソール画面に出力します。
import sqlite3
# データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
sql = """SELECT * FROM users"""
c.execute(sql)
#全レコードを取り出す
print(c.fetchall())
#保存(コミット)する
conn.commit()
#データベースへの接続を終了する
conn.close()
出力結果:
[(1.0, 'ヤマダ', '30'), (2.0, 'タナカ', '32'), (3.0, 'ウエダ', '26')]
テーブル内のデータを取得してfetchall( )メソッドを使用してコンソール画面にレコードを出力する事ができました。
テーブル内のレコードはfor文で一つずつ取得する事ができます。
import sqlite3
# データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
# レコードを生年月日の降順で取得する
for row in c.execute('SELECT * FROM users age'):
print(row)
#データベースへの接続を終了する
conn.close()
出力結果:
(1.0, 'ヤマダ', '30')
(2.0, 'タナカ', '32')
(3.0, 'ウエダ', '26')
SQLコマンドのORDER BYを使い「age」を指定すると年齢が若い順にレコードを取得する事ができます。
import sqlite3
# データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
# レコードを生年月日の降順で取得する
for row in c.execute('SELECT * FROM users ORDER BY age'):
print(row)
#データベースへの接続を終了する
conn.close()
出力結果:
(3.0, 'ウエダ', '26')
(1.0, 'ヤマダ', '30')
(2.0, 'タナカ', '32')
このようにSQLコマンドで取得する条件を変更する事ができます。
作成したテーブル名称を変更する事もできます。構文は下記になります。
ALTER TABLE 変更前のテーブル名 RENAME TO 変更後のテーブル名
import sqlite3
#データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
sql = """ALTER TABLE users RENAME TO example"""
conn.execute(sql)
#保存(コミット)する
conn.commit()
#データベースへの接続を終了する
conn.close()
テーブルの名前を「users」から「example」に変更する事ができました。
Pythonでデータベース内のレコードを追加する方法
SQLコマンドのVALUES( )の引数「?」を指定して値を受け取りレコードをexecute( )メソッドで追加できます。
import sqlite3
#データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
sql = """INSERT INTO example VALUES(?, ?, ?)"""
#挿入するレコードを指定
data = ((4, 'キムラ', 20))
c.execute(sql, data)
c.execute('SELECT * FROM example age')
print(c.fetchall())
#データベースへの接続を終了する
conn.close()
出力結果:
[(1.0, 'ヤマダ', '30'), (2.0, 'タナカ', '32'), (3.0, 'ウエダ', '26'), (4.0, 'キムラ', '20')]
テーブルにレコードを複数追加するにはexecutemany( )メソッドを使用します。
import sqlite3
# データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
sql = """INSERT INTO example VALUES(?, ?, ?)"""
#挿入するレコードを指定
data = [
(5, "Yamada", 10),
(6, "Tanaka", 19),
(7, "Ueda", 15),
]
#複数のデータを追加する
c.executemany(sql, data)
c.execute('SELECT * FROM example')
print(c.fetchall())
#保存(コミット)する
conn.commit()
#データベースへの接続を終了する
conn.close()
出力結果:
[(1.0, 'ヤマダ', '30'), (2.0, 'タナカ', '32'), (3.0, 'ウエダ', '26'), (5.0, 'Yamada', '10'), (6.0, 'Tanaka', '19'), (7.0, 'Ueda', '15')]
このようにデータベースのレコードを追加していく事ができました。
Pythonでデータベースのレコードを削除する方法
データベースのレコードを削除します。削除の場合はSQLコマンドのはDELETEを使いwhereの後に消したいデータの条件を指定します。SQLコマンドの構文は下記になります。
DELETE FROM テーブル名 WHERE 削除するデータ
import sqlite3
# データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
c.execute('DELETE FROM example WHERE id=?', (3,))
#保存(コミット)する
conn.commit()
c.execute('select * from example')
print(c.fetchall())
#データベースへの接続を終了する
conn.close()
出力結果:
[(1.0, 'ヤマダ', '30'), (2.0, 'タナカ', '32'), (5.0, 'Yamada', '10'), (6.0, 'Tanaka', '19'), (7.0, 'Ueda', '15')]
このテーブルの1行目の要素はidなのでidが3の「(3.0, ‘ウエダ’, ’26’)」を指定して削除しました。
テーブルを削除する事もできます。構文は下記になります。
DROP TABLE IF EXISTS テーブル名
import sqlite3
#データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
sql = """DROP TABLE IF EXISTS users"""
conn.execute(sql)
#保存(コミット)する
conn.commit()
テーブルが削除されました。テーブルが削除されているのでSQL文のselectで参照してみるとエラーがでます。
import sqlite3
#データベースに接続する
conn = sqlite3.connect('sample.db')
c = conn.cursor()
c.execute('select * from example')
print(c.fetchall())
出力結果:
c.execute('select * from example')
sqlite3.OperationalError: no such table: example
このように、テーブルが削除されているのが確認できます。
まとめ
Pythonの標準ライブラリのsqlite3を使いデータベースに接続しテーブルの作成やレコードの追加や削除をする事ができました。データベースはテーブルやレコードという単位でデータを扱うことができて項目の型も定義する事ができるので、より厳密にデータを管理することが可能です。以上、PythonでSQLiteを使う方法についてでした。
Udemyの動画学習でもPythonを勉強しよう!
「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!
UdemyのPythonおすすめ33講座レビューリスト