sqlite3とは
sqlite3はpythonにあらかじめ組み込まれているデータベース。コード例とともに見てみましょう。
sqlite3の基本
import sqlite3
conn = sqlite3.connect('customer.db') dbがすでにあれば読み込む,なければdbを作成して読み込む
c = conn.cursor() 操作のためにカーソルをつくる
"""CRUD操作"""
conn.commit()
conn.close()
CRUD操作
基本操作のCreateReadUpdateDeleteを見てみましょう。ポイントは、c.excecuteの中にSQL文を書くことです。SQL文は”で囲うこと。長くなるSQL文はdocstring “”” “”” で囲むことです。
Create
テーブルを作ってみましょう。customersという名前のテーブルを作り、カラムを追加します。(注意するのは、最後のemail text のところでカンマをつけない)
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
c.execute("""CREATE TABLE customers (
first_name text,
last_name text,
email text
)""")
conn.commit()
conn.close()
最後にdbの変更を確定するのに、commitします。データベースとの接続を解除するためにcloseします。
カラムの型には以下のようなものがあります。(小文字も可能) NULL 存在するかどうか, INTERGER 整数, REAL 実数, TEXT テキスト, BLOB そのままの状態 画像とか音楽
次に、顧客データを挿入してみましょう。
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
c.execute("INSERT INTO customers VALUES ('John', 'Elder's, 'john@codemy.com')")
c.execute("INSERT INTO customers VALUES ('Mary', 'Brown', 'mary@codemy.com')")
print("command executed successfully")
conn.commit()
conn.close()
これで、JohnとMaryのデータがテーブルに挿入されました。
複数データを一度に挿入してみましょう。一人の顧客データはタプルにして、全てリストにします。executemanyで挿入します。
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
many_customers = [
('Wes', 'Brown', 'wes@brown.com'),
('Steph', 'Kuewa', 'steph@kuewa.com'),
('Dan', 'Pas', 'dan@pas.com'),
]
c.executemany("INSERT INTO customers VALUES (?,?,?)", many_customers)
print("command executed successfully")
conn.commit()
conn.close()
Read
次はデータを読み込んでみましょう。SELECT分で検索して、呼び出します。そしてc.fetchall()でオブジェクトを取り出します。
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
c.execute("SELECT * FROM customers")
c.execute("SELECT * FROM customers WHERE last_name = 'Elder'")
c.execute("SELECT * FROM customers WHERE last_name LIKE 'Br%'")
c.execute("SELECT * FROM customers WHERE email LIKE '%codemy.com'")
c.execute("SELECT rowid, * FROM customers ORDER BY rowid DESC")
c.execute("SELECT rowid, * FROM customers ORDER BY last_name")
c.execute("SELECT rowid, * FROM customers WHERE last_name LIKE 'Br%' OR rowid = 1")
c.execute("SELECT rowid, * FROM customers ORDER BY rowid DESC LIMIT 3")
c.fetchone() 一行だけ取り出す
c.fetchmany(3) 3 行取り出す
c.fetchall() 全てをリスト型で取得
items = c.fetchall()
for item in items:
print(item)
conn.commit()
conn.close()
Upload
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
c.execute("""UPDATE customers SET first_name = 'John'
WHERE rowid = 1
""")
conn.commit()
conn.close()
Delete
import sqlite3
conn = sqlite3.connect('customer.db')
c = conn.cursor()
c.execute("""DELETE from customers WHERE rowid = 4""")
conn.commit()
conn.close()